Avatar billede bagnavnet Nybegynder
09. december 2004 - 15:17 Der er 20 kommentarer

Opret tabeller

Hej

Jeg har følgende

Kunde: kundeid(PK), navn

Afdeling: afdelingsid(PK), adresse, email, telefonnr, kundeid(FK), brugerid(FK).

Bruger: brugerid(PK), navn, telefonnr, email

Bestillingsliste: brugerid(PK), vareid(FK)

Vare: vareid(PK), navn, pris.

Første spørgsmål: Ser ovenstående nogenlunde korrekt ud?
Man skal kunne indtaste nogle varer, indtaste nogle brugere, og DB skal kunne gemme nogle vare under en bestemt bruger (til dette formål har jeg lavet bestillingslisten).

Andet spørgsmål: Jeg har forsøgt at oprette ovenstående. Men er i tvivl om hvordan jeg fx får (FK)brugerid i afdeling til at peje på (PK) brugerid i bruger? Har forsøgt mig med references, men efter at have kørt test på det ser det dog ikke ud til at virke. Er det overhovedet nødvendigt at gøre eller kan den selv finde ud af det?

Håber der er en der kan hjælpe mig med ovenstående så jeg kan få oprettet mine tabeller korrekt.
Avatar billede arne_v Ekspert
09. december 2004 - 15:25 #1
Har en afdeling kun 1 kunde ??

Jeg ville tro at kunde skulle have en FK som pegede på afdeling.
Avatar billede arne_v Ekspert
09. december 2004 - 15:26 #2
Eller er det kundens afdelinger ? Så er det selvfølgelig ok !
Avatar billede arne_v Ekspert
09. december 2004 - 15:28 #3
Og hvad med bruger.

Hvis det er egen bruger, så giver det vel ikke mening at koble bruger og vare.

Men hvis det er kundens bruger, så er det vel et problem med kun 1 bruger
per afdeling.
Avatar billede arne_v Ekspert
09. december 2004 - 15:29 #4
Du ville få bedre råd, hvis vi forstod hvad der skulle gemmes i databasen.

FK->PK er nemt. Du INSERT'er først i PK tabellen som har autoincrement id og
så INSERT'er du i FK tabellen med LAST_INSERT_ID().
Avatar billede bagnavnet Nybegynder
09. december 2004 - 16:58 #5
en kunde kunne være fx, Nordea.
en afdeling kunne være en af deres afdelinger i landet.
en bruger er en ansat i én afdeling.
en vare er dem som brugeren har mulighed for at købe.
Og så er jeg i tvivl om bestillingslisten. Når en bruger bestiller nogle varer under sit brugerid, så skal jeg jo på en eller anden måde kunne finde de varer som tilhører den bruger.
Bestillingslisten skulle også fjerne det * til * forhold der ellers bliver mellem bruger og vare. Og ligeledes skal den kunne stå for at holde styr på hvilke varer brugeren har bestilt.

Jeg håber det er forklaring på hvad ideén er med systemet.
Én kunde har mange afdelinger. Én afdeling har mange brugere. Én bruger har 1..* bestillingslister (dog kun én pr dag). Og, én bestillingsliste har mange varer.
Avatar billede arne_v Ekspert
09. december 2004 - 17:03 #6
Hvis en afdeling har mange brugere så er det vel også bruger der skal have
en FK som peger på afdeling ?
Avatar billede bagnavnet Nybegynder
09. december 2004 - 17:12 #7
dvs
Afdeling: afdelingsid(PK), adresse, email, telefonnr, kundeid(FK).

Bruger: brugerid(PK), navn, telefonnr, email, afdelingsid(FK)

istedet for ovenstående?
Avatar billede arne_v Ekspert
09. december 2004 - 17:29 #8
ja
Avatar billede bagnavnet Nybegynder
09. december 2004 - 17:33 #9
ok.

Hvordan opretter jeg så mine tabeller:
Har benyttet mig af følgende fx:

create table taafdeling(
afdelings_id char(4)
, adresse varchar2(100)
, email varchar2(20)
, telefonnr varchar(13)
, kundeid char(4)
, brugerid char(4)

,primary key (afdelings_id)
, foreign key (kundeid) references takunde);

Ved bare ikke helt hvor jeg skal starte, for jeg tror ikke den kan lave den references hvis ikke kunde tabellen er oprettet osv med de andre tabeller. Jeg havde før problemer med fx at joine tabeller hvor den ikke fandt noget resultat, hvilket kunne tyde på at de ikke er forbundet korrekt.
Avatar billede arne_v Ekspert
09. december 2004 - 17:37 #10
tabellerne skal oprettes i den rigtige række følge således ar den tabel man
refererer til er oprettet

brug af foreign keys i MySQL kræver InnoDB tabeller, hvilket skal angives ved
tabel oprettelsen med TYPE=InnoDB så vidt jeg ved

MySQL kræver at der er index på de felter der skal bruges i referencer
Avatar billede bagnavnet Nybegynder
09. december 2004 - 17:44 #11
ok, kan godt følge dig i tabeloprettelsens-rækkefølgen.

Mht. det andet så aner jeg ikke hvad jeg skal gøre.
Avatar billede arne_v Ekspert
09. december 2004 - 17:58 #12
Avatar billede arne_v Ekspert
09. december 2004 - 17:58 #13
Avatar billede bagnavnet Nybegynder
10. december 2004 - 12:02 #14
Når jeg kører følgende create:
-----------------------------------
create table Afdeling
            (
                Afdelings_id    char(3)
                                not null
                                primary key
                                                   
            ,  Adresse        varchar2(100)
                                not null
                               
            ,  Email          varchar2(50)
                                not null
                               
            ,  Telefonnr      varchar2(14)
                                not null
                           
            , Kunde_id        char(3)
                                not null                             
                                foreign key references Kunde on delete set null
                                on update cascade
            )
      ;   

-----------------------
får jeg denne fejl:

foreign key (Kunde_id) references Kunde on delete set null on update cascade)
                                                                        *
FEJL i linie 19:
ORA-00907: manglende højre parentes

Jeg kan ikke se der skulle være noget galt med min create, kan du?
Avatar billede arne_v Ekspert
10. december 2004 - 12:19 #15
ORA-00907 ????

Kører du Oracle eller MySQL ?
Avatar billede bagnavnet Nybegynder
10. december 2004 - 12:24 #16
Oracle
Avatar billede bagnavnet Nybegynder
10. december 2004 - 12:30 #17
jeg er vist kommet galt i byen....kan du hjælpe mig alligevel?
Avatar billede arne_v Ekspert
10. december 2004 - 14:56 #18
muligvis - men jeg skal hjem til min Oracle bog først
Avatar billede bagnavnet Nybegynder
10. december 2004 - 15:26 #19
jeg oprettede dem uden "on delete set null on update cascade".
Er dog løbet i andre problemer. Jeg har to tabeller der hedder:

Ordreliste: (PK)Ordrenr, vare_id, (FK)Bruger_id.
Vare: (PK)Vare_id, navn, pris, (FK)Ordrenr.

Jeg har oprettet varetabellen således:
-----------------
create table Vare
            (
                Vare_id    char(6)
                                not null
                                primary key
                               
                                       
            ,  Navn        varchar2(50)
                                not null
             
            , Pris          varchar2(8) << Hvad skal jeg kalde pris istedet for varchar2??                 
                                     
            , Ordrenr        char(8)
                            null,  << Hvad skal denne hedde så jeg ikke er tvunget til at sætte værdier ind på dens plads??? Den skal kun bruges ved ordrebestilling.                           
                               
                               
                                foreign key (Ordrenr) references Ordreliste
          );   
----------------------------

Se spørgsmålene skrevet i koden...
Avatar billede bagnavnet Nybegynder
10. december 2004 - 15:27 #20
hvis jeg indsætter værdier til ordrenr får jeg denne fejl:
----------------------
insert into Vare
*
FEJL i linie 1:
ORA-02291: integritetsbegræns. (HANDELSSYSTEM.SYS_C002757) overtrådt - overordnet nøgle ikke fundet
---------------------

Hvis jeg ikke indsætter værdierne på ordrenr pladsen får jeg denne fejl:
----------------------------
insert into Vare
            *
FEJL i linie 1:
ORA-00947: ikke nok værdier
---------------------------

Bliver den da aldrig tilfreds??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester