Pierwsza własna baza danych

0

Chciałem spytać czy w miarę dobrze myślę jeśli bym chciał napisać bazę danych np.dla salonu samochodowego. Na razie znam tylko podstawy języka.

Zrobiłbym tabele z:

  • danymi sprzedawców (tabela by miała klucz główny)
  • samochodami na sprzedaż (tabela zawierała by klucz główny)
  • sprzedane samochodu (tabela by zawierała klucz obcy tabeli sprzedawców oraz samochodów na sprzedaż)
0

Czym się różni tabela by miała klucz główny od tabela zawierała by klucz główny?

0

Przydałaby się również tabela klienci,modele, marki samochodów no i zależy czy w przyszłości chciałbyś otworzyć więcej takich salonów - wtedy przydalaby się tabela salony i tu też zależy czy w 1 salonie można sprzedać tylko 1 samochód - wtedy tworzyłaby się relacja wiele do wielu więc dodatkowa tabela. Też przydałyby się jakieś tabele na faktury zakupów, reklamacje, kraje z jakich samochód pochodzi nie wiem czy twój salon miałby sprzedawać tylko nowe samochody czy również używane - wtedy dochodzą również dodatkowe tabele :).

0

Widzę że dopiero zaczynasz, dlatego nie polecam robić zbyt rozbudowanej bazy danych. To co masz teraz na początek starczy, a gdy zechcesz ją dalej rozwinąć, to po prostu dopiszesz to czego będziesz potrzebował.

To co jest ważne to zadbanie o normalizację. https://pl.wikipedia.org/wiki/Normalizacja_bazy_danych . Nie musisz bawić się w ostatnią postać, ale spróbuj chociaż zrobić pierwsze 2,3.

0

Przykładowa baza z następującymi tabelami:
Sprzedawca (idSprzedawcy, imie, nazwisko,dataUrodzenia, adres) - można zastosować zamiast sztucznego klucza głównego, naturalny np. pesel, nip, idOdciskuPalca pomnożona przez wzrost - wiek etc.
Samochody (idSamochodu, marka, model)
Sprzedaz (idSprzedazy, idSamochodu - klucz obcy, idSprzedawcy - klucz obcy, dataSprzedazy, kwotaSprzedazy)

Cena może być umieszczona w tabeli samochody. Jeżeli jest to stała cena niepodlegająca negocjacjom.

0

@mariano901229 Po co w bazie danych używać polskich nazw? Lepiej od razu nauczyć się stosowania angielskich odpowiednich zamienników. Nie polecałbym też nazywania kolumn typu ID z afiksem od nazwy tabeli

SELECT idSprzedawcy FROM sprzedawcy --poniekąd brzmi dziwnie
SELECT id FROM vehicle_vendor --dałem vehicle - bo możliwe że baza rozrośnie się o motocykle
0

Nie polecałbym też nazywania kolumn typu ID z afiksem od nazwy tabeli

Dlaczego nie?
Bardzo wygodnie i przejrzyście jest potem robić klucze obce na takie tabele.

0

Sorry - źle się wyraziłem. U mnie najczęściej wygląda to tak
id | id_author | id_vehicle | id_owner...... czyli klucz główny (id najczęściej ) zostawiam bez afiksu, dlaczego? Skoro robimy selecta/joina/obcy klucz w związku z tabelą vehicle.... to po co dublować tą informację?

0
axelbest napisał(a):

@mariano901229 Po co w bazie danych używać polskich nazw? Lepiej od razu nauczyć się stosowania angielskich odpowiednich zamienników. Nie polecałbym też nazywania kolumn typu ID z afiksem od nazwy tabeli

SELECT idSprzedawcy FROM sprzedawcy --poniekąd brzmi dziwnie
SELECT id FROM vehicle_vendor --dałem vehicle - bo możliwe że baza rozrośnie się o motocykle

Człowiek chce się nauczyć tworzyć bazy. Nie mieszajmy mu w głowie niech zrobi tak jak umie. Co do nazw. Widziałem wiele projektów gdzie nazwy angielskie są pomieszane z polskimi. Często stosuje Id z nazwą tabeli dla mnie takie rozwiązanie się sprawdza. Zresztą jest gdzieś napisane jak ma być nazwana kolumna z kluczem głównym. Ważna by była czytelna.

0

Dlaczego pokazuje mi błąd w pierwszej linijce, jeśli dobrze nazwe wpisuje?

INSERT INTO SzczegoloweDaneCzlonkow
(
IdentyfikatorCzlonka,
Imie,
Nazwisko,
DataUrodzenia,
Ulica,
Miasto,
Wojewodztwo,
KodPocztowy,
Email,
DataPrzystapienia
)
VALUES
(
1,
'Katarzyna',
'Szewczyk',
'1977-01-09',
'ul.Główna',
'Łódź',
'łódzkie'
'12-456',
'[email protected]',
'2004-02-23'
);
0

Jaki błąd?

0

Column count doesn't match value count at row 1

0
INSERT INTO SzczegoloweDaneCzlonkow
(
IdentyfikatorCzlonka,
Imie,
Nazwisko,
DataUrodzenia,
Ulica,
Miasto,
Wojewodztwo,
KodPocztowy,
Email,
DataPrzystapienia
)
VALUES
(
'1',
'Katarzyna',
'Szewczyk',
'1977-01-09',
'ul.Główna',
'Łódź',
'łódzkie'
'12-456',
'[email protected]',
'2004-02-23'
);
0

nadal to samo.

0

Jakiego typu jest pole IdentyfikatorCzlonka ? (zakładam, że nie jest to właściwy typ ;) )

A tak w ogóle co to za baza.
Jeżeli MySQL (zgaduje) to pokaż wynik zapytania:

SHOW COLUMNS FROM SzczegoloweDaneCzlonkow
0

wpisałem integer bo tak miałem w podręczniku z którego się uczę, może było trzeba dać int a nie integer?

0

Daję w załączniku, teraz IdentyfikatorCzlonka jest na końcu bo usunąłem go i dodałem jeszcze raz z typem int zamiast integer, ale nic to nie pomogło. Czy można jakoś zrobić aby IdentyfikatorCzlonka był znowu pierwszy?

0

wpisałem przed chwilą byle jakie dane to poszło, a ten kod co podałem w pierwszym poście nie chce działać.

0
INSERT INTO SzczegoloweDaneCzlonkow
(
IdentyfikatorCzlonka,
Imie,
Nazwisko,
DataUrodzenia,
Ulica,
Miasto,
Wojewodztwo,
KodPocztowy,
Email,
DataPrzystapienia
)
VALUES
(
'1',
'Katarzyna',
'Szewczyk',
'1977-01-09',
'ul.Główna',
'Łódź',
'łódzkie'       -- BRAK PRZECINKA !!!
'12-456',
'[email protected]',
'2004-02-23'
);
0

dobra dzięki, jakoś łatwo takie rzeczy zauważyć.
Czy da się zrobić teraz tak aby identyfikatorczlonka wrócił na pierwsze miejsce tak aby najpierw wartość tego pola wpisywać?

0

znaczy nie łatwo*

0

W sumie to komunikat jasno na to wskazywał, ale tylko spojrzałem, że liczba wierszy się zgadza to kombinowałem dalej, a nie spojrzałem na przecinki ...

A co pytania:
http://stackoverflow.com/questions/6805426/how-to-move-columns-in-a-mysql-table

0

Ktoś pokazał,że tak przesuwa się pole na pierwsze miejsce:

ALTER TABLE UserOrder 
   CHANGE order_id order_id INT(11) NOT NULL FIRST;

Próbowałem tak i nie działa:

ALTER TABLE SzczegoloweDaneCzlonkow CHANGE IdentyfikatorCzlonka int NOT NULL FIRST
0

Dobra to zadziałało:

ALTER TABLE SzczegoloweDaneCzlonkow MODIFY COLUMN IdentyfikatorCzlonka int FIRST
0

A czy rekord da się przesunąć do góry tak jak pole?

0

A czemu miało by to służyć ?

0

Bo np. tutaj chciałbym rekord z numerem 5 przesunąć nad 6, da się? W załączniku zdjęcie:

0

Wyniki masz posortowany po danych kolumnach i to od ich zawartości zależy kolejność rekordów.

Dodaj ORDER BY do swojego zapytania

1
Biały Terrorysta napisał(a):

Bo np. tutaj chciałbym rekord z numerem 5 przesunąć nad 6, da się? W załączniku zdjęcie:
Taka mała rada. W przypadku gdy nie dasz klauzuli order by w zapytaniu sql'owym nie masz gwarancji jak zostaną zwrócone rekordy. Przy bardziej zaawansowanych zapytaniach gdzie masz złączenia kilku tabel wyniki mogą być pomieszane i nie mieć żadnego logicznego ułożenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1