Új hozzászólás Aktív témák
-
nyunyu
félisten
válasz
Pürrhosz
#5643
üzenetére
1:1-nél mindegy, melyik oldalon van a külső kulcs, működhet az, amit eredetileg elképzeltél.
(Még mindig nem értem az adatmodelledet, ez valami adatpiac akar lenni csillag sémával, ahol A a hub, B, C meg a különböző dimenziói? Akkor eleve A-ba kellett volna tenni a B_index és C_index oszlopokat.)
Akkor:
A-ba B_index felvétele:
ALTER TABLE A ADD COLUMN B_index INTEGER FOREIGN KEY REFERENCES B(B_index);A.B_index mező feltöltése
MERGE INTO A
USING B
ON (A.A_index = B.A_index)
WHEN MATCHED THEN
UPDATE SET A.B_index = B.B_index;Ha nem 1:1 volt eredetileg a kapcsolat, akkor hibaüzenettel el fog szállni!
B-ből a felesleges A_index kidobása:
ALTER TABLE B DROP COLUMN A_index; -
nyunyu
félisten
válasz
Pürrhosz
#5641
üzenetére
Eléggé félremehetett a DB tervezése, ha mindenhol 1 : N reláció lett implementálva. (1 A objektumhoz tartozhat N féle B tulajdonság, ekkor kerül az A_index oszlop a B táblába.)
Igen, ha az A-C viszonyt/kapcsolatot/relációt is N : M-re akarod átalakítani, akkor oda is kell egy új kapcsolótábla, értelemszerűen A_index és C_index oszlopokkal.
-
nyunyu
félisten
válasz
Pürrhosz
#5639
üzenetére
Ha jól értem, akkor neked inkább egy új, AB tábla (a_index, b_index) kéne, az kapcsolná össze az A táblában leírt objektumokat, és a B táblában leírt tulajdonságaikat.
Így tetszőleges N:M kapcsolatot le tudnál írni: egy A-hoz több B tulajdonság is tartozhatna (pl. alma lehet piros, zöld és sárga is), és B tulajdonság tartozhatna több A objektumhoz is. (alma és citrom is sárga).Kapcsoló tábla létrehozása A-ra, B-re mutató külső kulcsokkal:
CREATE TABLE AB (
A_index INTEGER FOREIGN KEY REFERENCES A(A_index),
B_index INTEGER FOREIGN KEY REFERENCES B(B_index)
);
Törölni az AB táblából bármikor tudsz, viszont a külső kulcsok miatt sem az A-ból, sem a B-ből nem fogsz tudni olyan értéket törölni, amire az AB hivatkozik!Feltöltése a meglévő B táblából:
INSERT INTO AB (A_index, B_index)
SELECT A_index, B_index
FROM B;(B táblában ezután már felesleges az A_index mező, el lehet dobni:
ALTER TABLE B DROP COLUMN A_index;
Helyette mindig az AB táblát kell majd joinolni.)Új kombó, pl. zöld alma beszúrása (ha már külön-külön létezik az alma és a zöld is):
INSERT INTO AB (A_index, B_index)
SELECT A.A_index, B.B_index
FROM A
JOIN B
ON 1=1
WHERE A.A_name = 'Alma'
AND B.B_name = 'Zöld';Milyen színű répa van?
SELECT B.B_name
FROM A
JOIN AB
ON AB.A_index = A.A_index
JOIN B
ON B.B_index = AB.B_index
WHERE A.A_name = 'Répa';Melyik gyümölcs sárga?
SELECT A.A_name
FROM B
JOIN AB
ON AB.B_index = B.B_index
JOIN A
ON A.A_index = AB.A_index
WHERE B.B_name = 'Sárga';
Új hozzászólás Aktív témák
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RTX 5060Ti 16GB GAMER PC termékbeszámítással
- Dell Precision 3571 i7-12700H 32GB 1000GB FHD RTX T600 4GB 1 év teljeskörű garancia
- AZONNAL KÉSZLETRŐL! AMD Ryzen 7 9800X3D 64GB DDR5 RAM 2TB Gen4 SSD RTX 5090 32GB GDDR7 1200W
- AKCIÓ! LENOVO ThinkPad P15 Gen 1 munkaállomás - i7 10750H 16GB DDR4 256GB SSD Quadro T1000 W11
- BESZÁMÍTÁS! Sony PlayStation 5 825GB SSD lemezes konzol fejhallgatóval garanciával hibátlan működés
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
