Část I
Revidováno 9. prosince 10 01:00 EST
Podíval jsem se na váš DDL. OK. Nejprve musíme udělat krok zpět a uspořádat vaši databázi. To vyřeší polovinu vašich problémů (vaše SQL bude přímočaré; a rychlé; méně indexů; nejsou vyžadovány žádné dočasné tabulky). Chvíli jsem si říkal, aha, ty máš své kolony, musí to být stabilní, ale není šance. Shora dolů od nuly, ok. Podívejte se na tento diagram vztahu entit (není zbytečné pracovat na datovém modelu, což jsou entity, vztahy a atributy , dokud nedostaneme ER správně), a zkontrolujte, zda je správná.
-
Chcete-li to provést, odpovězte na následující otázky (krátké odpovědi jsou v pořádku). Tyto otázky objasňují Pravidla pro subjekty a podnikání . Jak porozumíte databázím obecně a svým datům konkrétně, je zásadní. Ušli jste dlouhou cestu sami, takže to můžeme vzít odtamtud.
-
Myslím, že ▶tento příspěvek◀ může vám pomoci, abyste porozuměli formálním fázím, které je třeba dodržet; kterou zde zkratujeme.
-
Nejdůležitější je úplně a úplně zapomenout na funkci a jakékoli požadavky na kódování. Data musí být modelována nezávisle na aplikaci, jednoduše jako Data. Funkční modelování je jiná věda. Nejprve si jeden správně; pak dejte druhému právo; a ti dva spolu hrají krásné melodie. Zkuste je zaseknout dohromady; dělají oba úkoly současně a nevytvoří z nich ani příměstskou garážovou kapelu.
Pro stručnost a pro dobro každého, kdo to čte, používám uzavřenou a otevřenou sekci; když je otevřená položka (diskuze) uzavřena, udělám ji stručnou a přesunu ji do sekce Uzavřeno. Udržujte číslování, protože věci se nám občas vracejí. Možná budete chtít udělat totéž, nebo dokonce smazat diskuzi na vaší straně.
Odkazy na pěkné obrázky jsou na konci.
Omlouváme se:editace nefunguje; dílčí číslování je nekonzistentní
Uzavřené problémy
- users.bb_locations_csv je vztah mnoho k mnoha mezi uživateli a místy:
- Každý z těchto prvků by měl být záznam v samostatném sloupci, v samostatném řádku
- Jeden uživatel může mít mnoho míst a 1 místo může mít mnoho uživatelů je mnoho k mnoha
- Přečtěte si ▶tento příspěvek◀ k diskusi o tom, jak se s tím zachází a v jaké fázi se to řeší
- V této logické fázi je to pouze vztah n::n, jak jsem nakreslil, na to můžete prozatím zapomenout, bude dodán, jednoduše, až se dostaneme do fyzické fáze.
- Věřte mi, poskytnu kód, který nebude složitější než
...WHERE IN ()
pro váš deklarovaný účel. - Když se zamyslím, když vám zlomím prsty, budete psát ještě pomaleji, takže raději ne
- Dobře, vaše aplikace je založena na prohlížeči a stránka je dynamická (rada jsem hledala statické stránky, které je třeba opravit); pokračujte se zaškrtávacími políčky.
.
- users.bb_categories_csv je vztah mnoho k mnoha mezi uživateli a kategoriemi
- Ditto.
.
- Ditto.
-
Potvrzeno:bulletin (bbs) bez uživatele neexistuje; uživatel vydá bulletin a tím začne celý cyklus; poté zve na odpovědi a hodnocení.
3.1 Potvrzeno:Ve skutečnosti existuje pouze jedna nástěnka a v databázi neexistuje jako Věc.
3.2 Potvrzeno:že organizace nikdy nebude mít více než jednu nástěnku a že klasifikace a kategorizace jsou všechny adekvátně zpracovávány tabulkou/funkcí kategorií
-
Smazáno.
-
Potvrzeno:Rozdíl mezi bulletiny a odpověďmi je v tom, že odpovědi závisí na existenci bulletinu, nemají název a nejsou kategorizovány podle umístění nebo kategorie, protože závisí na existenci bulletinu samotného.
-
Smazáno.
-
Komentáře zaznamenány. Vyřešeno.
7.1. Pro každý jednotlivý bulletin odeslaný jiným uživatelem může každý uživatel odeslat více než jednu odpověď.
7.2. Pro každý jednotlivý bulletin odeslaný uživatelem může tento uživatel odeslat jednu nebo více než jednu odpověď.
7.3. Smazáno.
7.4. Smazáno.
.
8. Potvrzeno:každý uživatel může do bulletinu přidat nejvýše jedno hodnocení (které lze zrušit/změnit)
.
9. Potvrzeno:každý uživatel může přidat maximálně jedno hodnocení k odpovědi (stejně)
10.1. Dané:uživatelské jméno pochází z organizace a je to jedinečné jméno, které identifikuje zaměstnance. Například e-maily jsou example@datlq. - autentizace se provádí pomocí ldap a je vyžadována pro připojení a získání dalších informací o zaměstnancích
- Potvrzeno:Uživatelské jméno je vynikající identifikátor
10.2. Potvrzeno:Jméno, Příjmení ... Místo narození atd. zůstávají jako (tradiční) sloupce pro zajištění People
nejsou duplicitní.
.
11. Vzhledem k tomu:V tuto chvíli můžeme identifikovat naše kanceláře podle náhodných jmen, která jsou v organizaci obecně známá, protože máme jen asi 3 hlavní kanceláře a mnoho poboček v terénu. Příkladem může být Washington DC nebo místní kancelář ve Virginii. Celkově si myslím, že se pokusíme udržet celkový počet pod 20. Chci také zaznamenat přesnou adresu každého místa, protože by to mohlo být použito k jedinečné identifikaci kanceláří pro uživatele.
- Poskytováno:
StateCode+Town
jako PK;IsMainOffice
jako booleovský.
.
12. Potvrzeno:Description
a Name
pro Category
jsou povinné.
.
13. Dané:Uživatelé nebudou moci přispívat do některých kategorií. Pouze uživatelé s dostatečně vysokými právy budou mít právo přispívat do určitých kategorií.
- Poskytováno:
Permission
vUser, Location, Category
je metoda hodnocení takových práv.
.
14. Potvrzeno:Location.Administrator
je UserIds
správce pro Location
.
.
15. Vzhledem k tomu:Vždy bude potřeba pouze to, co se mi líbí nebo nelíbí. Nemyslím si, že by měl být neutrální postoj, protože to je stejné jako nevolit? To, že se mi líbí, se zdá být relevantnější pro odpovědi na bulletin, které jsou upřímné. Tj. vidím vaši odpověď a místo toho, abych psal svou, s vámi budu jen souhlasit – stávající nástěnka je v organizaci do jisté míry sociálním aspektem a myslím si, že lajkování a nesympatie/souhlas a nesouhlas vytváří úroveň kontroverze, která vybízí k účasti . To, že se vám bulletin líbí nebo nelíbí, však nemusí být vždy zcela vhodné.
15.1 Poskytuje:Like
jako boolean v BulletinRating
a ResponseRating
. To bude vyžadovat interpretaci každého přístupu.
15.2. Když již není logická hodnota, lze jej změnit na RatingCode
a implementován jako vyhledávací tabulka. Názvy jsou pak určeny spojením a interpretace je eliminována. Nakreslil jsem to v Prvním datovém modelu, abyste viděli, co jsem tím myslel 15.3. Odstraněno ve druhém datovém modelu.
.
16. Potvrzeno:každý uživatel má domácí Location
(kromě seznamu Locations
že je to zajímá).
.
17. Potvrzeno:Permission
podle (13).
.
18. Potvrzeno:Mohou být vyžadována další oprávnění podle datového modelu.
18.1. Pokud to uděláte nyní, nebudete se muset starat o to, kdy se organizace rozhodne zabránit určité Person
z odeslání Responses
nebo Bulletins
nebo jejich hodnocení; a chce, aby byla tato funkce implementována včera.
18.2. I když jej neimplementujete, ponechte mezi hodnotami, které implementujete, mezery.
.
19 Potvrzeno:Bulletin
je o Location
.
19.1. Potvrzeno:Nejsou žádné Bulletins
bez Location
19.2. Potvrzeno:Nejsou žádné Bulletins
bez Location
.
19.3 Potvrzeno:Neexistují žádné Bulletins
bez User
(deklarativní). Ale zatím nemáme žádný způsob, jak tohoto User
omezit; tedy jakýkoli User
můžete vložit Bulletin
pro jakékoli Location
(můžete to omezit v kódu, např. na Locations
každý User Is Interested In
.
19.4 Potvrzeno:Neexistují žádné BulletinRatings
bez Bulletin
a hodnocení User
.
19.5 Potvrzeno:Nejsou žádné Responses
bez Bulletin
.
19.4 Potvrzeno:Nejsou žádné ResponseRatings
bez Response
a hodnocení User
.
19.7. Mohou však existovat Users
, Locations, and
kategorie`, nezávisle.
.
20. Pokud vám to nebude vadit, poskytnu konvence pojmenování atd. Měly by být samozřejmé a hodnota se zobrazí, až když začnete kódovat SQL. Prosím, zeptejte se, pokud něco není. Pro začátek jsou všechna jména v jednotném čísle. Mixed Case je snadněji čitelný (pro jazyk SQL se předpokládá použití velkých písmen).
20.1. Moje zkušenost je, že název_tabulky na rozdíl od název_tabulky jsou opravdu technické formy a uživatelé je nemají rádi; Konzistentní smíšený případ se líbí všem. Je to jedna z věcí, kterou nelze změnit, proto vybírejte pečlivě.
.
21. Pro vaši potřebu seskupovat stoly, což je dobré, mějte na paměti, že jde o fyzický problém. Na úrovni logického datového modelu mají tabulky normální názvy, nezatížené fyzickými problémy. Představte si, že fyzické tabulky mají předponu něco jako (a použijte pro to velká písmena):
- REF_
pro referenční (jako je uživatel) a vyhledávací tabulky
- BUL_
pro systém Bulletin
.
Nejsem schopen pojmenovat tabulky velkými písmeny? Nejsem si jistý proč. Nevím, proč nemůžu mít názvy tabulek velkými písmeny. Souvisí to s používáním databázových tabulek MyIsam?
.
22. rank
(vše) lze odvodit přímo z databáze (nezapomeňte, že se nemusíte starat o kód během datového modelování). Pokud jej uložíte, jedná se o chybu normalizace; duplikovaný sloupec; který musí být udržován v aktuálním stavu; který se může dostat mimo synchronizaci s odvozenou hodnotou; který se nazývá anomálie aktualizace. Pátý normální formulář eliminuje anomálie aktualizací. To je moje minimální úroveň normalizace, takže to ode mě dostanete.
22.1. Vůbec nezasahuji do pořadí řazení nebo oblíbenosti; ve skutečnosti, podle zvuků, jste tuto funkci neuzavřeli. Beru pouze redundantní data, sloupec pořadí , out, jako součást procesu normalizace.
22.2. Zde je ▶Rychlý návod◀
na operátoru RANK() (jak je běžně známý). Není to ANSI SQL; jedná se o rozšíření Oracle a MS. Není to však vyžadováno, pokud rozumíte poddotazům, a proto je Sybase nemá. Pochybuji, že to MySQL má, takže si s tím musíte dát hlavu. Předpokladem je porozumění skalárním dílčím dotazům. Syntaxe Sybase, takže vkládejte středníky atd. Klidně se ptejte na konkrétní otázky.
.
Nikdy jsem neviděl takový přístup psaní Rank =(SELECT.... Je to tak stejné jako (SELECT ...) jako Rank?
.
22.3. Potřeba pochopit proč, není vůbec žádný problém. Jen děti slepě dodržují jednoduchá pravidla a ty mezi ně určitě nepatříš.
.
23. Potvrzeno:users.total_bulletins
je nadbytečný; lze to odvodit. Odebráno.
.
24. Všechny vaše PK jsou ID. Ještě vás nebaví se ztrácet v kódu? Zapomeňte na nalepení Id
iot PKs na vše, co se hýbe, pojďme zjistit, jak vaši uživatelé Identifikujte jejich entity; které Entity jsou skutečně nezávislé a ty druhé, které závisí na Nezávislých entitách.
24.1. Nikdy nepoužívejte Id
nebo v jakékoli takové formě. Pokud se jedná o PK, použijte úplný formulář.
24.2. Volejte location_id, location_id, ať je kdekoli, včetně tabulky PK. Výjimkou je situace, kdy potřebujete ukázat roli. To bude zřejmé v datovém modelu.
.
25. Nemáte žádnou deklarativní referenční integritu, žádnou definovanou Cizí klíče. To je špatná zpráva z mnoha různých důvodů. Jakmile budou tyto otázky vyjasněny, přidejte je prosím. DRI znamená, že v SQL je deklarována integrita co nejvíce, ne-li všechny. ISO/IEC/ANSI SQL standard to umožňuje, ale freewarový konec trhu standard neposkytuje a pomalu ho dohání. Znamená to, že server nepovolí přidání řádku do tabulky FK, pokud PK neexistuje v nadřazené tabulce. MySQL nedávno poskytlo DRI pro cizí klíče. Informace o FK najdete na ▶ tento článek◀
.
25.1. Pro CHECK omezení a PRAVIDLA je budete muset implementovat do kódu.
moje cizí klíče jsou podobné, users-id(fk) =users.id(pk) Nejsem si jistý, jak je přidat jiné než to, co jsem udělal, ale určitě to udělám, jakmile budu vědět, jak na to.
Dvacet pět. Poznamenané komentáře. Nejsem specialista na MySQL. Ano, to jsou problémy, na které musíte přijít sami. Obecně, z mého prohlížení, je MySQL beznohé; pro cokoliv SQL potřebujete InnoDB.
.
27. Vzhledem k tomu:Přehodnotil jsem požadavky na řazení bulletinu. Uživatelé mohou třídit chronologicky - snadné, dává to smysl. Uživatelé mohli bulletiny třídit podle data poslední odpovědi na bulletin. Pak můžeme zapomenout na pořadí a mělo by být opravdu snadné řadit bulletiny chronologicky podle času jejich poslední odpovědi? Jaké jsou vaše myšlenky.
Otevřené problémy
(Nic)
Datový model
Dobře, za předpokladu, že nemáte problémy s ERD, a implementací všech uzavřených problémů jsem namodeloval data a připravil Pátý datový model 9. prosince 10 k prohlédnutí. Rozhodně potřebuji mnohem více zpětnou vazbu, dotazy atd. k tomu. Mám potíže přijmout, že je to hotovo. Pravděpodobně nejlepší bude začít psát skutečný kód pro vaše problémové oblasti.
Odkazy
▶Odkaz na IDEF1X Notation◀ Toto si opravdu musíte přečíst a porozumět tomu, než si přečtete datový model.
▶Odkaz na data pátého bulletinu Model◀ Diagram vztahu entit je na první stránce, za ním následuje Datový model .
-
Klíče jsou do značné míry rovné IDEF1X (kromě UserId, které jsem uvedl jako protipól); což znamená relační klíče peněženky. Nevylepšené a neoptimalizované pro fyzikální aspekty. Než se na ně vrhnete, nejprve si jich všimněte, registrujte je a vyhodnoťte. Samozřejmě můžeme přidat
Id
iot klíčů, ale než to uděláme, ujistěte se, že rozumíme tomu, co ztratíme. -
Všimněte si identifikátorů (plné čáry) podle dokumentu Notation. Páteř, obratle systému je
Location ... Bulletin ... Response
. -
Všimněte si, že Klíče ve skutečnosti implementují mnoho obchodních pravidel.
-
Všimněte si přirozené hierarchie, kterou jsem vykreslil. Podívejte se, jestli to pro vás má nějaký význam.
-
VerbPhrases jsou opravdu důležité; uvidíme, jestli něco znamenají.
Komentáře k prvnímu datovému modelu a odpovědi
Jeden dotaz, který mám, je, že primární klíč umístění bude použit k vytvoření podřízeného primárního klíče? (jsou spojeny plnou čarou) Moc tomu konceptu nerozumím
- Jaký je dobrý identifikátor pro Bulletin? , co vaši uživatelé přirozeně používají k identifikaci bulletinu ...
- "viděli jste včera bulletin z Virginie FO?",
- "Sally z Washingtonu určitě píše dobré bulletiny" atd.
nebo proč takový vztah mezi uživatelem a bulletinem neexistuje?
-
Podle záměru uvedeného výše, protože jsem nyní ukázal hodnocení jako tabulku a jaké by bylo vykreslení, jednou to odstraním
-
Myslím, že Permission by měla být entita.
-
Bulletin
PK je nyní(StateCode, Town, UserId, SequenceNo)
. Aby bylo jasno,SequenceNo
je v rámciStateCode, Town, UserId
:bude to 5 pro Sallyin 5. bulletin o MO/Billngs FO. -
Všimněte si, že uživatelské nastavení
BulletinsPerPage
, atd., jsou 1::1 sUser
, takže jsou vUser
; podřízená tabulka by byla nesprávná. -
Opraveny typografické chyby.
Komentáře k druhému datovému modelu a odpovědi
- Soubory PK pro oba
Bulletin
aResponse
byly změněny tak, aby odrážely (7).BulletinNo
aResponseNo
byly nahrazenyBulletinDate
aResponseDate
(což bývaloCreatedDate
), aby bylo možné více odpovědí naUser
podleBulletin
.
Komentáře ke třetímu datovému modelu a odpovědi
Věřte, že jste měli dobrou přestávku.
-
Nejméně před 30 lety (což vím) měli giganti v tomto odvětví tuto debatu. Jména jsou vždy v jednotném čísle. Tabulky jsou podstatná jména. Slovesné fráze jsou slovesa. To se neomezuje na konvence pojmenování db, platí to pro dokumenty, diplomové práce, disertační práce atd. Na konci dokumentu můžete mít 5 závěrů, ale název sekce nebo kapitoly v ToC i v horní části stránky je "Závěr".
Poté, co jsem s nimi bojoval celou cestu přes Uni, jakmile jsem nastoupil do své první placené programátorské práce a viděl důležitost pravidel v reálném světě, na rozdíl od teoretických argumentů, které jsme měli na vysoké škole, vzdal jsem to jako plýtvání. času. Veškerý ten čas a energie, které jsem promarnil, jsem uvolnil k produktivní práci. Od té doby nezpochybňuji obry; Jen přijímám. Že jejich mysl je větší než moje. Je to jako přijímat standardy nebo chovat se v rámci zákona nebo Boha. Nemám žádné opravdu, opravdu dobré důvody pro to, abych dělal něco nezákonného.
Každopádně, snadnost jazykování (diskuze, SQL, dokumentace), kterou taková pravidla podporují, nelze dostatečně vysvětlit; jak budete psát další a další kód SQL, bude to jasné.
Vždy můžete volně používat, co chcete. Dodávám pouze v jednotném čísle.
-
V pohodě u mě.
Ale musíte mít na paměti, že tyto dva prvky v identifikované sekvenci (ala non-PK Unique Index nebo Alternate Key) jsou všeobecně vyžadovány pro stanovení jedinečnosti pro osobu. Jejich odstranění bude mít za následek dvě věci. Za prvé, již nebudete moci identifikovat jedinečnost mezi
Users
(a proto můžete mít duplicitní řádky). Za druhé, AK se stane nejedinečným, Inversion Entry. -
Jde o to (na rozdíl od jednoho z příspěvků) jakýkoli sloupec, který je 1::1 s
User
PK, měl by být umístěn vUser
. Všechna nastavení předvoleb. Od té doby, co jsme vyčistiliInterestedLocations
aInterestedCategories
, Vím pouze oBulletinsPerPage
zbývající; ale jsem si jistý, že existují další.IsPreference2
je např. boolean;NumPreference3
je např. celého čísla. Atd. Můžete mi říct, jaké jsou skutečné preference.(Zkusme to v množném čísle:... libovolný sloupec, který je 1::1 s
Users
PK, měl by být umístěn vUsers
. Prostě to za mě nedělá, zavěšuji se na lámanou angličtinu a jsem trochu vzácnější ohledně svého mateřského jazyka.)Datový model aktualizován.
-
Vynikající. Dejte mi vědět, až vám to bude vyhovovat, a já vám dám fyzický model.
A co VerbPhrases?
Komentáře k 6. prosinci 10 20:38 EST (malé aktualizace)
.
28. Tam, kde je pouze jeden výskyt PK jako FK, je samozřejmě název sloupce FK stejný jako název sloupce PK. Pokud je však FK více než jeden occ (podívejte se na ResponseRating
), existují tři UserIds
), musíme je rozlišovat. V terminologii IDEF1X se tomu říká role. Role User
kdo vydal Bulletin
je Issuer
, a tak dále. Je zřejmé, že je lepší používat tento název a udržovat jej konzistentní v celé hierarchii (ne UserIds
v Bulletin
a poté, když se dostaneme k Response
, kde jsou dva a je požadováno rozlišení, změňte jej na IssuerId
. Myslel jsem, že s tím můžeš mít problém; v raných fázích se používá Issuer.UserId
tak, aby bylo zcela jasné, že se jedná o UserIds
jako FK a Role je Issuer
; když se dostaneme k fyzickému modelu, zjednoduší se na IssuerId
.
Podobně máme mnoho sloupců DateTime (pokud chcete zkráceně Date; jinak Dtm), které je třeba odlišit.
.
29. Nedával dokument IDEF1X Notation smysl?
- PK pro každou tabulku je nad čarou v určeném pořadí.
- Nezapomeňte, že stejně neseme PK nadřazených tabulek, a pokud to má smysl, použijeme tyto PK k vytvoření podřízené PK.
-
Pro
Bulletin
:- Umístění FK
(StateCode, Town)
pro které je vydáno UserIds
emitenta- a DateTime it issued, aby to bylo jedinečné.
- proto (StateCode, Town, IssuerId, BulletinDate)`
- Umístění FK
-
Chcete-li odstranit všechna
ResponseRatings
pro tentoBulletin
, použijteWHERE =
na těchto čtyřechBulletin
sloupců.
.
30. Protože (State, Town)
je kód PK Location
, nosit kamkoli. A tvoří součást Bulletin
PK, takže všechny závislé tabulky obsahují tyto sloupce, protože obsahují Bulletin
PK.
Již dříve jsme identifikovali, že (State, Town)
je PK, Nechám to tak, jak je Pro změnu viz (38).
.
33. Stojí za diskusi. Ano, pokud jej budete zobrazovat při (např.) zobrazování Responses
a uživatelé rozumějí UserName
. Ne, pokud je 30 bajtů a je tam také jedinečné 4 bajtové UserIds
. Cílem je učinit tato rozhodnutí vědomě, vědomi si toho, čeho se vzdáváte, když nakonec usoudíte, že nějaký 6sloupcový 30bajtový klíč je příliš těžkopádný na to, aby se přesunul k dětem.
- Na začátku jsem uvedl, že bych použil
UserIds
jako typickéId
Pk, protože je přenášen/migrován do několika podřízených tabulek. - Způsob vytvoření si můžeme nechat na později. Ale je to čistý náhradní PK.
.
34. Žádný problém. Category
už to má. Změním Order
na ListOrder
.
.
35. Tak určitě. Podle toho, co jsem četl a slyšel, jsem s ním docela spokojený. Ale chtěl bych více tam a zpět, abych dosáhl jisté sebedůvěry, než napíšete kód. Případně to považujte za vzdělávací zkušenost a přijměte, že model a kód se mohou později změnit. Chcete, abych teď vytvořil Fyzikální? Pokud mi poskytnete nějaké opravy, zveřejním další verzi. Očekávám předvolby v User
. Rychle si také projděte funkce a zkontrolujte, zda máte všechny potřebné sloupce.
Podívejte se na některé další odpovědi za účelem učení a zájmu.
.
36. Připojí se. Stačí se připojit na čtyři tři sloupce na rozdíl od jednoho. SQL je při spojování těžkopádný a nová syntaxe, která to měla usnadnit, je ve skutečnosti těžkopádnější. Moji kodéři nikdy nepíší spojení:šetříme čas a překlepy. Mám proces, který vzhledem ke dvěma nebo více tabulkám vygeneruje kód se všemi sloupci a spojeními. Neznám dost MySQL, abych to pro vás převedl.
Datový model aktualizován.
.
Komentáře k 8. prosinci 10 20:49, Čtvrtý datový model a odpovědi
.
Zkontrolujte předchozí sekci bezprostředně výše, jsou tam malé aktualizace.
IDEF1X:Vaše rychlost je v pořádku.
Poznamenejte si dítě vždy "zdědí" nadřazený PK jako FK (buď plná nebo přerušovaná čára), jinak mezi nimi není žádný vztah. Použitím těchto sloupců, které stejně v podřízeném prvku existují, k vytvoření podřízeného PK, neseme význam (a to je rozdíl mezi pevným a zlomeným). Nemusíme tedy pro dítě hledat samostatný Identifikátor. Relační síla v této metodě bude jasná později, když budete kódovat.
Část, kterou se zabýváme, se týká Identifikátorů :přirozené vs nepřirozené; smysluplné vs nesmyslné. Později uvidíte, jak můžeme využít relační schopnost enginu, když je potomek PK tvořen z nadřazeného PK. (Není vaše příjmení stejné jako příjmení vašeho otce?)
Je také důležité porozumět relačním databázím a jejich schopnostem. To je ztraceno, když přistupujeme k databázi (např.) z perspektivy OO a zacházíme s ní jako s místem, aby naše třídy byly "trvalé". Proto se pokusíme naučit a používat Relační termíny. Je to těžké, když jedete do Francie a očekáváte, že tam budou mluvit americky a budou používat stejnou měnu; naučte se mluvit 10 slov francouzsky, přivítají vás s otevřenou náručí a s místními zažijete úplně jiný zážitek.
Každopádně pokračujte v implementaci modelu. Uvědomte si, že v určitém okamžiku pravděpodobně uděláme změnu. Uložte všechny své DDL. Uložte všechna svá testovací data jako příkazy vložení nebo jako zálohu tabulky nebo export formátu znaků (nemám ponětí, co MySQL v této oblasti umí/nemůže)..
37.1. Řeší se vztah n::n s Office
&Category
. To „uvidíte“, až se dostaneme k fyzickému modelu.
37.2. Hotovo.
37.3 Hotovo.
.
38. Vynikající. Stejně tak kratší. Všimněte si, že nikdy nebudou moci mít dvě Offices
ve stejném PSČ. NUMERIC(5,0) je dobré, ale myslel jsem, že USA se pohybují směrem k 7 číslicím. Nevadí, můžete na to přijít; je to vynikající PK pro Office
. Nyní tento sloupec, který byl součástí Address
, pravděpodobně ZipCode
, byla povýšena na vyšší účel, bez duplicit; protože jej neseme v 5 podřízených tabulkách a chceme, aby byl název PK jasný, podle dříve vysvětlených konvencí, budeme jej nazývat OfficeCode
; OfficeZipCode
může být hloupé.
Potřebujeme jedinečný index pro Name
aby se zajistilo, že nepřidají dvě Offices
se stejným jménem. Všimněte si, že pro účely vysvětlení je to ve skutečnosti logický klíč Office
, nahrazující (StateCode, Town)
a zůstane to tak.
Stále si myslím, že možná budete potřebovat StateCode
a Town
jako rychlý odkaz (jiný než sedět někde v Address
)
Datový model aktualizován, pátý je nyní k dispozici ke kontrole. Neuvedli jste své preference pro ...Date
vs ...Dtm
. Jdu s tím druhým, protože je specifičtější a identifikuji také časovou složku. Snadná změna.
Tato odpověď dosáhla maximální délky. Pokračování v "části II"