EggsTC | donderdag 15 mei 2003 @ 14:43 |
Ok, je hebt een database maar wil redundantie voorkomen. Hoe kan je dat doen??? Je hebt deze tabel :
| |
kareltje_de_grote | donderdag 15 mei 2003 @ 14:45 |
meerdere tabellen van maken volgens mij, Ik heb dit ooit wel eens op school gehad, maar is helaas een beetje weggezakt. | |
domolanglekker | donderdag 15 mei 2003 @ 14:46 |
tja zal effe me database boek erbij pakken moment.. | |
markvleth | donderdag 15 mei 2003 @ 14:46 |
Elk onderdeel (behalve pc in een apparte tabel) met daarin standaard dingen als leverancier, en misschien nog specefieke omschrijving en dan de onderdelen middels een koppel tabel koppelen aan een pc... edit:: je kan het zelf nog bonter maken trouwens en netter [Dit bericht is gewijzigd door markvleth op 15-05-2003 14:52] | |
NDAsilenced | donderdag 15 mei 2003 @ 14:47 |
quote:lijkt me wel handig om eerst te weten wat precies de omstandigheden zijn bij deze database.. Zoek eerst maar uit wat de primary key is | |
kareltje_de_grote | donderdag 15 mei 2003 @ 14:50 |
quote:en welke normaalvorm heb je dan? * ik vond normaliseren op school altijd best leuk | |
domolanglekker | donderdag 15 mei 2003 @ 14:50 |
is wel een flink werkje hoor. maar t komt er op neer dat je uit je elementaire gegevens de herhalende groepen moet uitzonderen en er aparte tabellen van moet maken. Maar weet wel dat normaliseren soms niet wenselijk is ivm performance. | |
domolanglekker | donderdag 15 mei 2003 @ 14:51 |
quote:brr.. normaliseren... me ergste nachtmerrie .. scheen t nog wel te snappen.. had er een flinke voldoende voor. | |
PEt0rtje | donderdag 15 mei 2003 @ 14:53 |
Ligt er ook aan wat je van de zaken op wilt slaan. Bijvoorbeeld Netwerkkaart: wil je opslaan of die aanwezig is Ja / Nee, dan is dat een eigenschap van de klasse Computer ofzo, maar als je ook andere gegevens op wilt slaan over die netwerkkaart, type, aantal aansluitingen, weet ik wat nog meer, dan kun je er voor kiezen daar een aparte tabel van te maken en een foreign key op te nemen naar die netwerkkaart in de klasse Comp. Volleges mij... | |
markvleth | donderdag 15 mei 2003 @ 14:53 |
quote:Dan ben je klaar ![]() | |
domolanglekker | donderdag 15 mei 2003 @ 14:53 |
maar ehm.. heb je geen database boek bij de hand ofzo ![]() ![]() | |
kareltje_de_grote | donderdag 15 mei 2003 @ 14:54 |
quote: ![]() de perfecte normaalvorm bestond nl niet volgens mijn docent. | |
domolanglekker | donderdag 15 mei 2003 @ 14:54 |
quote:configuratie item als in de ITIL methode ![]() | |
Lucille | donderdag 15 mei 2003 @ 14:54 |
quote:Aangezien de meeste informatie die je kan invullen behoort tot een vrij kleine groep elementen (hoeveel computermerken zijn er, hoeveel videokaarten, ....) kan je die info bijvoorbeeld in een aparte tabel zetten. Tabel Computermerken bijvoorbeeld met velden MerkID (integer) en Merk (Varchar). Zodoende hoef je in je hoofdtabel alleen maar een nummer te zetten. Zodoende sla je geen redundante informatie op. | |
domolanglekker | donderdag 15 mei 2003 @ 14:55 |
quote:dat klopt.. en soms moet je ook gewoon denormaliseren ![]() | |
EggsTC | donderdag 15 mei 2003 @ 14:57 |
Maar als ik Videokaart in 1 tabel zet kan je in die tabel wel 15000 keer krijgen : GeForce 2 bla bla?? Dat is toch juist redundantie? Daarom vroeg ik het me af. | |
EggsTC | donderdag 15 mei 2003 @ 14:57 |
quote:Primarykey moet ik nog toewijzen... sterker nog : de database bestaat (nog) niet eens. | |
markvleth | donderdag 15 mei 2003 @ 14:58 |
Overigens moet het doel bij het ontwerpen van een DB nooit zijn om geen redundantie te hebben. Het doel moet zijn om een representatie te hebben van de werkelijkheid, en alle mogelijke (geldige) situaties te kunnen opvangen... | |
domolanglekker | donderdag 15 mei 2003 @ 15:00 |
quote:toch wel iig zo weinig mogelijk redundantie ![]() | |
dexter12win | donderdag 15 mei 2003 @ 15:09 |
wat heeft een ip adres te maken met de configuratie van een compu ? | |
ranja | donderdag 15 mei 2003 @ 15:09 |
Tabel X: Computermerk - Netwerkkaart - Videokaart - IPnummer - Type Geheugen - Processor Niet genormaliseerd heb je bijvoorbeeld als vulling: ABC - DEF - GHI - JKL - MNO - PQR Wel genormaliseerd maak je een extra tabel: Tabel Processor: Vulling: Tabel X: ABC - DEF - GHI - JKL - MNO - 1 En dit kun je dus voor elke kolom doen. Wat je ook kunt doen, maar dat is een stap verder, is bepaalde combinaties maken... bv. Tabel Processor_Geheugen: (Of : Tabel X: En dit kan ook in eindeloze variaties... Overigens heeft dit niet zozeer met redundantie te maken, is puur normaliseren, en niet altijd nuttig (bv in het geval van platte data zoals je nu hebt, maar als dit een onderdeel van een voorraadsysteem is kan het wel handig zijn). | |
markvleth | donderdag 15 mei 2003 @ 15:10 |
quote:Dat spreekt voor zich natuurlijk, ook al ga je voor performance altijd zo min mogelijk redundantie | |
kareltje_de_grote | donderdag 15 mei 2003 @ 15:10 |
quote:indd laat de topicstarter eerst maar eens een fantsoenlijke database analyse maken. en ga dan de boel meer eens lekker over hoop halen door te normaliseren. | |
Darkysdust | donderdag 15 mei 2003 @ 15:14 |
quote:Hoeft toch juist niet? Je zet 1 keer die Geforce2 in die tabel met een eigen id, en vervolgens koppel je die id in een andere tabel aan de computer. | |
domolanglekker | donderdag 15 mei 2003 @ 15:14 |
maar eh topicstarter is dit gewoon voor jezelf of moet je iets doen voor school wat je niet helemaal snapt ![]() | |
Darkysdust | donderdag 15 mei 2003 @ 15:16 |
quote:Edit: zoals Ranja het dus doet...had geen zin om zo'n lange uitleg te maken ![]() | |
domolanglekker | donderdag 15 mei 2003 @ 15:18 |
quote:Dus voor iedere videokaart een aparte tabel ![]() | |
EggsTC | donderdag 15 mei 2003 @ 15:24 |
quote:Dan krijg je in die andere tabel toch iedere keer het zelfde "ID-nummer" wat ook weer redundantie is........ | |
Lucille | donderdag 15 mei 2003 @ 15:27 |
quote:Lijkt me beter om 1 tabel te hebben voor alle videokaarten. Hoeveel videokaarten zal je hebben? Hooguit enige 10tallen, desnoods 100 stuks. Daar ga je niet weer subtabellen voor maken. | |
Lucille | donderdag 15 mei 2003 @ 15:29 |
quote:Ja, maar die redundantie (dezelfde ID nummers in de hoofdtabel) blijf je houden, omdat de gegevens zelf redundant zijn (er zijn machines met dezelfde videokaart). Maar je kan beter redundant zijn in een integer, dan in een lange uitleg met characters. Een typefoutje is snel gemaakt, bovendien neemt het veel extra opslag in. | |
sop | donderdag 15 mei 2003 @ 15:36 |
Bijbeltje: http://home.student.utwente.nl/s.p.ekkebus/portfolio/files/Paper_DB_normalisation.pdf (geen idee of het goed is, ga het nu ook lezen). Overigens is het zelden wenselijk om verder dan de derde normaalvorm te normaliseren. [Dit bericht is gewijzigd door sop op 15-05-2003 15:39] | |
EggsTC | donderdag 15 mei 2003 @ 15:38 |
Kunnen er meerdere sleutels (die verwijzen naar vreemde sleutels) in een tabel? | |
Litpho | donderdag 15 mei 2003 @ 15:40 |
quote:Ja hoor. | |
Lucille | donderdag 15 mei 2003 @ 15:40 |
quote:Met Primary Keys wel samengestelde keys (dus 1 Primary key die bestaat uit de combinatie van meerdere velden), met Foreign Keys (verwijzgingen naar andere tabellen) zoveel je maar wilt. | |
sop | donderdag 15 mei 2003 @ 15:41 |
quote:Je bedoeld: code:Waarbij de velden met een =>FK verwijzen naar een andere tabel. M.a.w.: ja dat kan. -edit- Wellicht handig om even bij stil te staan: Primary Key : Unieke waarden in een tabel. De waarde van dat veld mag maar 1 keer voorkomen in de tabel. Foreign Key: De waarde van dit veld in de tabel mag wel meerdere malen in deze tabel voorkomen. De waarde van dit veld wijst echter naar een primairy key in een andere tabel. Een primairy key definieer je in de structuur van de tabel. De foreign key wordt gedefinieerd in de relatie tussen de tabellen. [Dit bericht is gewijzigd door sop op 15-05-2003 15:47] | |
EggsTC | donderdag 15 mei 2003 @ 15:43 |
Ik post zometeen ff mijn idee van normaliseren hier, brb | |
markvleth | donderdag 15 mei 2003 @ 15:44 |
quote:Alleen wil je dit eigelijk zoveel mogelijk vermijden... | |
ReSiever | donderdag 15 mei 2003 @ 15:46 |
quote:Normaliseren is superhandig, het is en blijft redelijk overzichtelijk, je hebt weinig tot geen redundantie, maar je krijgt er verrekte rottige query's van ![]() Maargoed, wij hebben dus ook de 1e t/m 4e normaalvorm behandeld, en dan ging op zich redelijk. Een makkelijk programma hierbij is SDW, die je redelijk helpt met het normaliseren, want goed normaliseren is nog helemaal geen eitje ben ik achter gekomen. Ik denk dat in 80% van de gevallen ook geeneens genormaliseerd wordt. De meeste mensen denken van: wat heb ik nodig, wat wil ik opslaan, en hoppa, beng, knallen ze 1 a 2 tabellen eruit waar alles ingepropt is Misschien dat je hier nog wat aan hebt! Succes! | |
Lucille | donderdag 15 mei 2003 @ 15:47 |
quote:Je wilt Foreign Keys vermijden? | |
Litpho | donderdag 15 mei 2003 @ 15:49 |
quote:Samengestelde Primary Keys vermoedelijk. | |
sop | donderdag 15 mei 2003 @ 15:50 |
quote:Ik denk dat als je niet normaliseert het programmeren/onderhouden van de inhoud van je database nog veel rottiger wordt. En zo moeilijk zijn joins nou ook weer niet. | |
ReSiever | donderdag 15 mei 2003 @ 15:50 |
quote:Ja, dat snap ik ook niet helemaal... dan is het principe van normaliseren dus al gevlogen.... | |
ReSiever | donderdag 15 mei 2003 @ 15:52 |
quote:Nee, joins zijn niet moeilijk, dat besef ik wel, maar je moet ermee gewerkt hebben. En mensen kiezen nou eenmaal voor de makkelijke manier.. Hup alles in 1 keer met een SELECT *, en daaruit lezen... maar daar is bij normaliseren geen sprake van ![]() | |
Lucille | donderdag 15 mei 2003 @ 15:52 |
quote:Ach, soms ontkom je er niet aan. Gewoonweg omdat er geen andere manier bestaat om op 1 veld een primary key te zetten. | |
sop | donderdag 15 mei 2003 @ 15:53 |
quote:Als je zo graag een platte database wilt hebben, dan maak je toch gewoon een view aan. Kun je gewoon SELECT * doen. | |
markvleth | donderdag 15 mei 2003 @ 15:55 |
quote:ja sorry, ik doelde inderdaad op samengestelde sleutels. Ja de enige keer dat je er niet aan ontkomt is een veel op veel relatie en je dus gebruik maakt van een koppeltabel. Voor alle andere situaties gebruik je slechts een veld voor de pk... | |
ReSiever | donderdag 15 mei 2003 @ 15:56 |
quote:Ja, maar niet iedereen heeft daar zoveel verstand van he ![]() | |
kareltje_de_grote | donderdag 15 mei 2003 @ 15:57 |
quote:En hoe maak je zo'n view aan? code:dus volgens mij schiet je daar nog niet veel mee op, ben je nog bezig met SQLlen. | |
Lucille | donderdag 15 mei 2003 @ 15:58 |
quote:Een database ontwerp maken zonder kennis van SQL lijkt me op zich al helemaal fout. Maar ja, zo heb ik genoeg foute database ontwerpen gezien in de afgelopen jaren. | |
ReSiever | donderdag 15 mei 2003 @ 16:00 |
quote:Ja, maar die kennis van SQL komt meestal niet verder dan een SELECT * FROM tabel .. en dan zo af en toe nog een WHERE erbij ![]() | |
EggsTC | donderdag 15 mei 2003 @ 16:01 |
Zoiets???????
Serienummer IPnummer Software_ID
Gebruiker
| |
Lucille | donderdag 15 mei 2003 @ 16:05 |
Ik zou het echt helemaal anders opzetten, maar of je dat wilt is een tweede. | |
EggsTC | donderdag 15 mei 2003 @ 16:06 |
quote:laat maar is zien dan. | |
markvleth | donderdag 15 mei 2003 @ 16:06 |
Kan een pc hetzelfde serie nummer hebben?????? | |
markvleth | donderdag 15 mei 2003 @ 16:07 |
quote:helemaal mee eens, dit is op ze zachts gezegd... ach laat ook maar... | |
sop | donderdag 15 mei 2003 @ 16:07 |
Ik zou een uniek nummer (zoals iemand al opperde) voor een configuratie maken. En daar vervolgens de rand apparatuur weer aanhangen. die randapparatuur kun je dan vervolgens weer normaliseren. | |
ReSiever | donderdag 15 mei 2003 @ 16:13 |
die videokaarten etc, de pconderdelen dus, die kun je alvast in een soort van aparte onderdelen tabel doen. Tabel artikel: tabel onderdeel: zoiets zou ik waarschijnlijk doen... | |
Lucille | donderdag 15 mei 2003 @ 16:44 |
Tabel PC_Info PC_ID (integer, Primairy Key) Type (integer, Foreign Key -> PC_Types) Serienummer Gebruiker_ID (integer, FK -> Gebruiker_Info) IP_Nummer MAC_Adres AantalUSB AGP (integer wat aantal aangeeft, eventueel gesplitst in totaal en in gebruik) ISA (idem) PCI (idem) Tabel PC_Types Tabel Hardware_Info Tabel Hardware_Types Tabel Software_Info Tabel Software_Types Tabel Gebruiker_Info Zoiets dus. Kost misschien iets meer moeite om het de eerste keer op te zetten, maar het onderhoud gaat sneller en je queries worden heel erg simpel. Je zoekt de PC_ID en aan de hand daarvan heb je een hele simepele query wat betreft de hardware en software die in de PC zit. | |
Lucille | donderdag 15 mei 2003 @ 16:45 |
quote:Lijkt me niet, anders is het geen serienummer. | |
markvleth | donderdag 15 mei 2003 @ 16:50 |
quote:Mij ook niet, maar volgens het model van EggsTC wel... |