/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[mySQL] Relationer
Fra : J. Nielsen


Dato : 17-09-03 14:20

Møjn!

Jeg er temmelig ny i mySQL, men har tidligere implementeret databaser i
Access.

Jeg vil nu gerne implementere en web-applikation til en forening, jeg er med
i. Applikationen skal udvikles i PHP og mySQL.

Jeg har lavet et tabel-design, og er klar til at implementere det. Når jeg
tidligere har implementeret noget lignende i Access, har jeg let kunnet
oprette relationer, eks. (1-mange), (mange-mange). Umiddelbart kan jeg ikke
se, hvordan det kan lade sig gøre med mySQL (eller SQL i det hele taget).

Jeg har fundet frem til, at man i SQL kan skrive dette:

create table organisation
( oid    int unsigned not null auto_increment,
name    varchar(40) not null,
primary key (oid)
);

create table orgaddress
( oid    int unsigned not null references organisation,
atype    varchar(20),
);

Så forstår jeg, at oid i orgaddress refererer til oid i organisation. Men
hvad får jeg egentlig ud af det? Hvilken type reference er det egentlig, jeg
har oprettet?

Jeg skal vel selv (vha. PHP-kode) sikre, at den referentielle integritet
bliver overholdt - eller hvad? Hvis jeg skal, så kan jeg ikke lige
umiddelbart se, hvad det er referencen bidrager med.

Desuden har jeg haft svært ved at finde frem til informationer på nettet om
brugen af referencer i mySQL. Måske er det ikke noget, der benyttes? Koder I
bare det hele selv i eksempelvis PHP?

I Access var det muligt at definere, at ændringer i data i en tabel også
medførte ændringer i de tabeller, der var refereret til tabellen med
ændringer (cascade updated records). Hvordan er det muligt i mySQL?

Jeg håber, at jeg har stillet spørgsmålet i den rigtige nyhedsgruppe. Hvis
ikke, så hører jeg gerne fra jer.

Jeg ser frem til at høre svar på mine spørgsmål.

Med venlig hilsen

Jakob Bro Nielsen




 
 
Troels Arvin (17-09-2003)
Kommentar
Fra : Troels Arvin


Dato : 17-09-03 15:20

On Wed, 17 Sep 2003 15:19:35 +0200, J. Nielsen wrote:

> Når jeg
> tidligere har implementeret noget lignende i Access, har jeg let kunnet
> oprette relationer, eks. (1-mange), (mange-mange). Umiddelbart kan jeg ikke
> se, hvordan det kan lade sig gøre med mySQL (eller SQL i det hele taget).

Jeg forstår ikke, hvad det er, du savner. Savner du et grafisk interface?


> Så forstår jeg, at oid i orgaddress refererer til oid i organisation. Men
> hvad får jeg egentlig ud af det? Hvilken type reference er det egentlig, jeg
> har oprettet?

I MySQL skal du vælge en særlig tabeltype for dine tabeller, for at
REFERENCES får nogen virkning, se
http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#CREATE_TABLE

Hvis du til det udbryder "Jamen det er jo smadder forvirrende!" eller
"Det er jo noget biks!", så har du ret.


> Jeg skal vel selv (vha. PHP-kode) sikre, at den referentielle integritet
> bliver overholdt - eller hvad? Hvis jeg skal, så kan jeg ikke lige
> umiddelbart se, hvad det er referencen bidrager med.

Den bidrager ikke med noget, hvis dine tabeller ligger i en MySQL-database
og ikke er af InnoDB-typen.


> Desuden har jeg haft svært ved at finde frem til informationer på nettet om
> brugen af referencer i mySQL.

Overskriften for MySQL er "Hastighed frem for korrekthed", og i lang tid
har MySQL slet ikke haft fungerende integritetschecks i stil med det, du
ønsker. Det er nok forklaringen på, at det er så dårligt beskrevet.


> Koder I bare det hele selv i eksempelvis PHP?
Personligt vil jeg sige: Nej, vi vælger det rette værktøj til den rette
opgave: Hvis man ønsker understøttelse af REFERENCES, CHECK, osv.,
vælger man et andet DBMS end MySQL, fx. PostgreSQL (som kan
siges at have agendaen "Korrekthed før hastighed").

--
Greetings from Troels Arvin, Copenhagen, Denmark


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste