Avatar billede dennish Nybegynder
25. november 2005 - 00:03 Der er 6 kommentarer og
1 løsning

hjælp til database desing med nøgler og ralationer osv.

Håber nogle kan hjælpe mig med noget database design

Jeg har følgende Entiteter:

bars(name, address, license, phone, email)
beers(name, manufacturer)
customers(name, address, password)

Relationer:


sells(bars_name, beers_name, manufacturer)
likes(customer_name, beers_name, manufacturer)
visits(bars_name, customers_name)
favorite(customer_name, beers_name, manufacturer)

Kardinalitet("hedder det vist nok")

bars  --  m <sells>        n --- beers
bars  --  m <visits>      n --- customers
beers --  n <likes>        m --- customers
customers -- m <favorite>  1 --- beers

n:m betyder hvis 0 eller flere
1:n og n:1 betyder hvis 1 til mange og mange til 1

Hvordan får jeg mapper de her date ned i tabeller i min database
Jeg ved det er noget det hedder primærenøgler der unikt identificerer en kolonne i databasen og noget der hedder en fremmedenøgle, som vist nok er det sammen som en svag entitet mængde (sammensat nøgle fra hver sin entitet ) Har ikke helt tjek på hvordan jeg skal bruge den

Kan nogen hjælpe mig med at få oprettet de 7 tabeller. med de respektivi nøgler og relationer
Avatar billede dennish Nybegynder
25. november 2005 - 00:05 #1
og kan nogen forklare mig hvor jeg i det hele taget skal have tabeller med relationer. Kan jeg ikke bare have alle mine data i en tabel med masse attributter ??
Avatar billede arne_v Ekspert
25. november 2005 - 01:16 #2
normalisering sikrer konsistens - ikke korrekthed men konsistens

Navn        Postnr  By
Andersen    7000    Vejle
Børgesen    7000    Fredricia
Christensen  7000    Kolding

Er inkonsistent. Fejlen er svær at gennemskue og svær at rette fordi man skal
alt igennem.

Navn        Postnr
Andersen    7000
Børgesen    7000
Christensen  7000

Postnr  By
7000    Vejle

er forkert men konsistent. man ser hurtigt at alle 7000 er forkert og når man
har rettet en række til:

Postnr  By
7000    Fredericia

så er alt på plads.
Avatar billede teepee Nybegynder
25. november 2005 - 09:15 #3
Her er et udkast (ORACLE style) som er ændret en lille smule ifft. dit oplæg.

CREATE TABLE manufacturers
(
  id INTEGER,
  name VARCHAR2(50) NOT NULL,
  address VARCHAR2(50),
  phone VARCHAR2(50),
  email VARCHAR2(50),
  CONSTRAINT PK_manufacturers PRIMARY KEY (id )
)

CREATE TABLE bars
(
  id INTEGER,
  name VARCHAR2(50) NOT NULL,
  address VARCHAR2(50),
  phone VARCHAR2(50),
  email VARCHAR2(50),
  CONSTRAINT PK_bars PRIMARY KEY (id )
)

CREATE TABLE beers
(
  id INTEGER,
  name VARCHAR2(50) NOT NULL,
  manufacturer_id INTEGER NOT NULL,
  CONSTRAINT PK_beers PRIMARY KEY (id )
)

ALTER TABLE beers ADD
CONSTRAINT FK_BEERS
FOREIGN KEY (manufacturer_id)
REFERENCES manufacturers (id) ENABLE
VALIDATE

CREATE TABLE customers
(
  id INTEGER,
  name VARCHAR2(50) NOT NULL,
  address VARCHAR2(50),
  phone VARCHAR2(50),
  email VARCHAR2(50),
  password VARCHAR2(50),
  CONSTRAINT PK_customers PRIMARY KEY (id )
)

CREATE TABLE sells_beers
(
  bar_id INTEGER,
  beer_id INTEGER,
  CONSTRAINT PK_sells_beers PRIMARY KEY (bar_id, beer_id )
)

ALTER TABLE sells_beers ADD
CONSTRAINT FK_SELLS_BEERS_1
FOREIGN KEY (bar_id)
REFERENCES bars (id) ENABLE
VALIDATE

ALTER TABLE sells_beers ADD
CONSTRAINT FK_SELLS_BEERS_2
FOREIGN KEY (beer_id)
REFERENCES beers (id) ENABLE
VALIDATE

CREATE TABLE likes_beers
(
  customer_id INTEGER,
  beer_id INTEGER,
  favorite VARCHAR2(1) NOT NULL,
  CONSTRAINT PK_likes_beers PRIMARY KEY (customer_id, beer_id )
)

ALTER TABLE likes_beers ADD
CONSTRAINT FK_LIKES_BEERS_1
FOREIGN KEY (customer_id)
REFERENCES customers (id) ENABLE
VALIDATE

ALTER TABLE likes_beers ADD
CONSTRAINT FK_LIKES_BEERS_2
FOREIGN KEY (beer_id)
REFERENCES beers (id) ENABLE
VALIDATE


CREATE TABLE visits_bars
(
  customer_id INTEGER,
  bar_id INTEGER,
  CONSTRAINT PK_visits_bars PRIMARY KEY (customer_id, bar_id )
)

ALTER TABLE visits_bars ADD
CONSTRAINT FK_VISITS_BARS_1
FOREIGN KEY (customer_id)
REFERENCES customers (id) ENABLE
VALIDATE

ALTER TABLE visits_bars ADD
CONSTRAINT FK_VISITS_BARS_2
FOREIGN KEY (bar_id)
REFERENCES bars (id) ENABLE
VALIDATE
Avatar billede dennish Nybegynder
28. november 2005 - 00:24 #4
teepee>> har endelig får tid til at kigge på dit udkast:

Det du skriver er, hvis jeg har forstået det ret:

bar(id, name,address, phone, mail) primary key = id
manufactures(id, name, adress, phone mail) primary key = id
beers(id, name, manufacturs) primary key = id, foreign key =  manufacturer_id 
customer(id,name,adress,phone,mail,password) primary key = id

sells_beers(bar_id, beer-id) foreign keys = bar_id, beer_id
likes_beers(customer_id, beer_id, favorite) foreign keys = customer_id, beer_id
visits_bars(customer_id,bar_id) foreign keys = customer_id, beer_id)

Med hensyn til min kardinalitet:

I tabellen sells har jeg 2 fremmede nøgler: der hver især referer til den primærenøgle i tabellerne bars og beers. Øhh hvordan mapper jeg lige m:n imellem bars og beers ?

I tabellen visit har jeg også 2 fremmed nøgler: der hver især referer til den primærenøgle i tabellerne customer og bars. Igen hvordan får jeg lige mappet M:n ralationen

Og ved likes tabellen M:n ralation øhh hvordan får jeg mappet det i min database og der er også en N:1 imellem customer og beers

Det skal lige siges at jeg bruger MySQL
Avatar billede dennish Nybegynder
28. november 2005 - 00:27 #5
og hvis jeg har frostået dig ret. Så er grunden til at du bruger id er at et id kan være unikt fremfor et navn. ("2 x bars kan godt have det samme navn .. ")
Avatar billede teepee Nybegynder
28. november 2005 - 10:02 #6
Hejsa,
Hvorfor har du problemer med relationerne? Hvis du siger at bar A sælger Øl1, Øl2 fra Manu1, og Øl7 fra Manu2, så har du blot tre rækker i din tabel, som kun indeholder bar-id og øl-id, idet at manufactur er indirekte kendt af øllen. det er netop relationstabellen der fjerner din m-m relation og gør den til 2* 1-m relationer.
Avatar billede dennish Nybegynder
28. november 2005 - 22:57 #7
teepee>> nu har jeg langt om længe forstået princippet. Takker :-)
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