Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tabele i relacje
Forum PHP.pl > Forum > Bazy danych
barinoshrek
witam

mam sobie zrobione tabele i relacje miedzy nimi w taki oto sposob

Kod
CREATE TABLE InfDok
(    
    NrDowKs INTEGER (10) NOT NULL AUTO_INCREMENT,  
    IdZdarzenia INTEGER (30) NOT NULL,  
    DataZd DATE,  
    OpisZdarz varchar (60),  
    ZakTowWgCenZak DECIMAL (10,2) DEFAULT 0.00,    
    KosztUbocz DECIMAL (10,2) DEFAULT 0.00,
    Uwagi varchar (60),
    PRIMARY KEY (NrDowKs)
) TYPE=InnoDB;
*************************************

CREATE TABLE Kontrahent
(    
    IdKontr varchar (20) NOT NULL ,  
    NrDowKs INTEGER (10) NOT NULL ,
    IdZdarzenia INTEGER (30) NOT NULL,    
    ImieNazwisko varchar (30),
  Adres varchar (30),
    Telefon INTEGER (15) NOT NULL ,
    NIP INTEGER (10) NOT NULL ,
    PRIMARY KEY (IdKontr),
        INDEX (NrDowKs),
    FOREIGN KEY (NrDowKs) REFERENCES InfDok (NrDowKs)
    ) TYPE=InnoDB;
******************************************

CREATE TABLE Wydatki
(
    IdWydatki INTEGER (20) NOT NULL AUTO_INCREMENT,
  IdKontr varchar (20) NOT NULL ,
    IdZdarzenia INTEGER (30) NOT NULL,
  Wynagrodzenia DECIMAL (10,2) DEFAULT 0.00,
  KosztReprez DECIMAL (10,2) DEFAULT 0.00,
  PozWydat DECIMAL (10,2) DEFAULT 0.00,
  RazemWydat DECIMAL (10,2) DEFAULT 0.00,
  PRIMARY KEY (IdWydatki),
    INDEX (IdKontr),
    FOREIGN KEY (IdKontr) REFERENCES Kontrahent (IdKontr)
    ) TYPE=InnoDB;
***************************************

CREATE TABLE Przychod
(
    IdPrzychod INTEGER (20) NOT NULL AUTO_INCREMENT,
  IdZdarzenia INTEGER (30),
    WartSpTowUslug DECIMAL (10,2) DEFAULT 0.00,
  PozPrzych DECIMAL (10,2) DEFAULT 0.00,
  RazemPrzych DECIMAL (10,2) DEFAULT 0.00,
  PRIMARY KEY (IdPrzychod),
    INDEX (IdZdarzenia),
    FOREIGN KEY (IdZdarzenia) REFERENCES Kontrahent (IdZdarzenia)
      
) TYPE=InnoDB;



i mam z tym problem takiekgo rzedu, ze tabele InfDok, Kontrahent i Wydatki dodaja sie bez problamów, ale nie chce mi sie dodać/wgrac tabela Przychod?? , może ktos wie dlaczego gdzie moge miec błąd??
Zbłąkany
Wydaje mi się, że powinnieneś w tabeli "Przychod" zamiast:
  1. IdZdarzenia INTEGER (30),

dać
  1. IdZdarzenia INTEGER (30) NOT NULL,
smile.gif Patrząc na ten kod do takiego doszedłem wniosku, bo wszędzie gdzie w macierzystej tabeli było NOT NULL to dodawałeś i działało, a tam brakuje i nie działa biggrin.gif
barinoshrek
no idalej jest to samo sad.gif
sobstel
jaki komunikat o bledzie otrzymujesz?
barinoshrek
cos takiego

Kod
Executing Query. Wait ...
MySQL ERROR:

Can't create table './kramarye/Przychod.frm' (errno: 150)

QUERY:

CREATE TABLE Przychod
(
    IdPrzychod INTEGER (20) NOT NULL AUTO_INCREMENT,
  IdZdarzenia INTEGER (30),
    WartSpTowUslug DECIMAL (10,2) DEFAULT 0.00,
  PozPrzych DECIMAL (10,2) DEFAULT 0.00,
  RazemPrzych DECIMAL (10,2) DEFAULT 0.00,
  PRIMARY KEY (IdPrzychod),
    INDEX (IdZdarzenia),
    FOREIGN KEY (IdZdarzenia) REFERENCES Kontrahent (IdZdarzenia)
) TYPE=InnoDB;
Dafidov
Nie wiem czy pomoc jest jeszcze potrzebna ale miałem podobne kłopoty, wydaje mi się iż problem leży w tym iż w tabeli kontrachent nie nadałeś indexu
Kod
INDEX (IdKontr)

i oczwiscie referencja też nie wyjdzie ponieważ są inne typy danych w polu:
Kod
IdZdarzenia INTEGER (30) NOT NULL,

w tabeli kontrachent i w tablei Przychod:
Kod
IdZdarzenia INTEGER (30),

Jak tworzysz klucz obcy to musisz pamiętać aby i on i parametr do którego się odnosi miały te same typy danych.
Mam nadzieje że to pomoże smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.