Hogyan jelentenek sok sok kapcsolat hogy ugyanannál az asztalnál / szerv hibernált?

szavazat
0

Ez lehetséges? Úgy értem, lehet mindkét végén a sok sok kapcsolat pont ugyanannál az asztalnál?

A kérdést 10/12/2008 04:49
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
1

Nem vagyok benne biztos, hogy azt csinálni anélkül, hogy hatalmas, szörnyű redundancia. A szokásos módon kell kezelni a sok-sok kapcsolat két tábla között keresztül egy harmadik tábla, amely két elsődleges kulcs értéke, az egyik az első tábla, az egyik a második táblázat, egyedi korlát (olvasni „index”) szóló a kombináció minden ezeket az oszlopokat, és esetleg egy vagy két példányban (nem egyedi) indexek külön elsődleges kulcsokat. Nagy vonalakban:

CREATE TABLE Table1 (pkcol1 ... PRIMARY KEY, ...);
CREATE TABLE Table2 (pkcol2 ... PRIMARY KEY, ...);
CREATE TABLE MtoM_Table1_Table2
(
     pkcol1 ... REFERENCES Table1,
     pkcol2 ... REFERENCES Table2,
     PRIMARY KEY (pkcol1, pkcol2)
);
-- CREATE INDEX fk1_mtom_table1_table2 ON MtoM_Table1_Table2(pkcol1);
-- CREATE INDEX fk2_mtom_table1_table2 ON MtoM_Table1_Table2(pkcol2);

Ha a DBMS intelligens, akkor hagyja ki az indexet a vezető oszlop az elsődleges kulcs, mivel az index elsődleges kulcs is használható, amikor keresi a csak a vezető értéket.

Tegyük Table1 és 2. táblázat ugyanaz asztal (így, sőt, már csak Table1), mint ahogy azt a kérdést; ez általában mindig szükség van a MtoM_Table1_Table1 leképezési tábla - egy külön táblázat a fő asztalra. A leképezés táblázatot kell külön neveket a PK (elsődleges kulcs) oszlopot, de mindkét oszlop (vagy beállítja az oszlopok) a leképezési tábla fog utalni a PK oszlop (ok) az 1. táblázat.

CREATE TABLE Table1 (pkcol1 ... PRIMARY KEY, ...);
CREATE TABLE MtoM_Table1_Table1
(
     pkcol1 ... REFERENCES Table1(pkcol1),
     akcol1 ... REFERENCES Table1(pkcol1),
     PRIMARY KEY (pkcol1, akcol1)
);
-- CREATE INDEX fk1_mtom_table1_table1 ON MtoM_Table1_Table1(pkcol1);
-- CREATE INDEX fk2_mtom_table1_table1 ON MtoM_Table1_Table1(akcol1);

Ha akarta, hogy megszüntesse a leképezés táblázat is, akkor azt kell, hogy legyen egy második oszlopba az 1. táblázat, hogy tartsa a másik PK értéke - hívja FKcol1 (az idegen kulcs oszlop). Ez akkor hagyja a dilemma: mi az elsődleges kulcsot? Meg kell kombinációja PKCol1 és FKCol1. De FKCol1 állítólag hivatkozni az elsődleges kulcs egy sor -, így van egy ellentmondás. Még ha feltételezzük is sikerült elkerülni, hogy a probléma (hogyan pontosan?), Hogy „sok sort” a hivatkozási oldalon a sok-sok kapcsolat, akkor több sort a főtábla azonos adatokat az összes oszlop kivételével FKcol, de ezek referencia szám (több, általában) más sorok a táblázatban. Ez ellentmondás, plusz egy rémálom az elbocsátás, és akkor már elvesztette a egyszerű elsődleges kulcsot, plusz lenne szörnyű, hogy dolgozzanak ki, mi a fene folyik itt.

CREATE TABLE Table1
(
    pkcol1 ... /* PRIMARY KEY */,
    fkcol1 ... /* FOREIGN KEY REFERENCES Table1(pkcol1) */,
    ...
);
-- CREATE INDEX fk1_table1 ON Table1(pkcol1);
-- CREATE INDEX fk2_table1 ON Table1(fkcol1);

Nos, nem vagyok meggyőződve arról, hogy az egyetlen normális válasz: „Nem - nem tudja képviselni mindkét végét egy sok-sok kapcsolat ugyanannál az asztalnál, akkor kell használni egy leképezés táblázatot, hogy megtartja sok esély semmit dolgozik»a szokásos módon« a rendszerben".

Válaszolt 10/12/2008 05:49
a forrás felhasználó

szavazat
0

Ha használja a hibernálás-jelölések, van egy @ManyToMany, nem biztos a XML egyenértékű. Akkor meg kell jelennie az API dokumentációt a forgalmazás

Válaszolt 10/12/2008 04:50
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more