Misiek Napisano 2 Czerwca 2016 Udostępnij Napisano 2 Czerwca 2016 3. Wyciągnięcia Miasta do oddzielnej tabeli kompletnie nie rozumiem. Jedynym celem było chyba tylko skomplikowanie schematu. Zobacz, że ulica została u Dziecka a Miasto zostało sztucznie wyciągnięte. Dlaczego uważasz, że miasto w oddzielnej tabeli jest złe (pomijając już fakt, że ulica została)? Masz uporządkowane dane zeslownikowane, brak redundancji. Cytuj Odnośnik do komentarza
lindros Napisano 2 Czerwca 2016 Udostępnij Napisano 2 Czerwca 2016 3. Wyciągnięcia Miasta do oddzielnej tabeli kompletnie nie rozumiem. Jedynym celem było chyba tylko skomplikowanie schematu. Zobacz, że ulica została u Dziecka a Miasto zostało sztucznie wyciągnięte. Dlaczego uważasz, że miasto w oddzielnej tabeli jest złe (pomijając już fakt, że ulica została)? Masz uporządkowane dane zeslownikowane, brak redundancji. Decyzja projektowa. Celowo denormalizuję celem uproszczenia struktury. Moim skromnym zdaniem w tym przypadku na adres wystarczyłoby jedno pole tekstowe. Co innego gdyby to była siatka połączeń komunikacyjnych czy coś. Cytuj Odnośnik do komentarza
jmk Napisano 3 Czerwca 2016 Udostępnij Napisano 3 Czerwca 2016 Właśnie się zatrzymałem na tym problemie opiekunów. Jak wykonać, żeby jedno dziecko połączyć z dwoma opiekunami? Cytuj Odnośnik do komentarza
Gabe Napisano 3 Czerwca 2016 Udostępnij Napisano 3 Czerwca 2016 Jak pisał lindros - w podanym przez ciebie schemacie się nie da. Musisz stworzyć pośrednią tabelę, z dwoma kluczami obcymi: id_dziecka i id_opiekuna. W ten sposób dziecko o id XXX będzie mogło mieć więcej niż jednego opiekuna, przez wpis do tej tabeli: id_dziecko | id_opiekun XXXX | AAAA XXXX | BBBB Co rozwiąże też kolejny problem, gdzie jeden opiekun może mieć przypisanych kilkoro podopiecznych (np. matka dwojga dzieci). EDIT: jest teoretycznie możliwość rozwiązania problemu bez dodatkowej tabeli, tzn wpisywanie w id_opiekun kilku kluczy obcych np po przecinku, ale wtedy niemożliwe jest stworzenie relacji na modelu, a pokazywanie danych jest wtedy albo przez jakiś bardziej zaawansowany skrypt (rozbicie pola na poszczególne id w tabeli tymczasowej i połączenie z tabelą opiekunów), albo przez zewnętrzną aplikację. Cytuj Odnośnik do komentarza
jmk Napisano 3 Czerwca 2016 Udostępnij Napisano 3 Czerwca 2016 No tak, tylko nie wiem jak to fizycznie zrobić. Takie coś: http://i.imgur.com/CwNyuNU.png ? Cytuj Odnośnik do komentarza
Gabe Napisano 3 Czerwca 2016 Udostępnij Napisano 3 Czerwca 2016 Access żąda obowiązkowo klucza głównego do tabeli? Bo jak nie, to jest niepotrzebny. Ale nie przeszkadza. Relacja powinna być Dziecko.Identyfikator - OpiekunDziecko.Id_dziecko i OpiekunDziecko.Id_opiekun - Opiekun.Identyfikator. Nie wiem, czy tak jest, ale z diagramu tak nie wynika. Ale tak, o to chodziło. Cytuj Odnośnik do komentarza
jmk Napisano 3 Czerwca 2016 Udostępnij Napisano 3 Czerwca 2016 Niby tak mam, ale coś mi nie pasuje. Jak mam stworzyć w takim razie kwerendę, która wyświetli mi dzieci przypisane pod opiekunów? Mam tabele dziecko, tam jest ID, nazwisko, imię, data ur, ulica, id_miasta, nr_domu, nr_mieszkania, data_przyjęcia, id_grupy Tabela OpiekunDziecko ma ID, id_dziecko i id_opiekun Tabela Opiekun ma Id, id_formyopieki, nazwisko, imię, kontakt, adres Relacja idzie: z tabeli Dziecko Identyfikator do Tabeli OpiekunDziecko Id_dziecko, z tabeli OpiekunDziecko id_opiekun do tabeli Opiekun Identyfikator. Cytuj Odnośnik do komentarza
kacpergawlo Napisano 3 Czerwca 2016 Udostępnij Napisano 3 Czerwca 2016 Ale chcesz dane dzieci, które są pod opieką konkretnego opiekuna, czy wszystkie dzieci, które mają opiekuna? Jak to pierwsze to chyba coś takiego: SELECT Dziecko.Imie, Dziecko.Nazwisko (etc.)FROM Dziecko INNER JOIN OpiekunDzieckoON Dziecko.Id = OpiekunDziecko.Id_dzieckoINNER JOIN OpiekunON OpiekunDziecko.Id_opiekun = Opiekun.IdWHERE Opiekun.Imie ='XXX' AND Opiekun.Nazwisko = 'YYY' (czy tam po jakich danych chcesz ich szukać) Czymś takim wyświetlisz obok siebie imiona i nazwisko dzieci i przypisanych do nich opiekunów: SELECT Dziecko.Imie, Dziecko.Nazwisko, Opiekun.Imie, Opiekun.NazwiskoFROM Dziecko INNER JOIN OpiekunDzieckoON Dziecko.Id = OpiekunDziecko.Id_dzieckoINNER JOIN OpiekunON OpiekunDziecko.Id_opiekun = Opiekun.Id Jeszcze może coś takiego do znalezienia dzieci bez opiekuna (analogicznie łatwo przerobić na dzieci z opiekunem): SELECT DISTINCT Dziecko.Id,Dziecko.Imie, Dziecko.NazwiskoFROM dbo.Dziecko, dbo.OpiekunDzieckoWHERE Dziecko.Id NOT IN (SELECT Id_dziecko FROM dbo.OpiekunDziecko) Cytuj Odnośnik do komentarza
jmk Napisano 9 Czerwca 2016 Udostępnij Napisano 9 Czerwca 2016 Dalej mi nie działa.. chciałby ktoś spojrzeć na tę bazę, podesłałbym plik accdb. Niestety na razie mam 14 kwerend, a bez tej opieki nie zrobię wymaganych 25. Cytuj Odnośnik do komentarza
kacpergawlo Napisano 9 Czerwca 2016 Udostępnij Napisano 9 Czerwca 2016 Możesz wstawić, chociaż nie pamiętam czy jeszcze mam Accessa na lapku. Cytuj Odnośnik do komentarza
jmk Napisano 30 Sierpnia 2019 Udostępnij Napisano 30 Sierpnia 2019 Korzystał ktoś z opcji TRIGGER, aby tworzyć archiwum hmm działać (chodzi o UPDATE) ? Niby mam "gotowca", ale w mysql mi to nie przechodzi: CREATE TABLE `tabela` ( `id` int NOT NULL AUTO_INCREMENT, `kolumna1` varchar(16) NOT NULL, `kolumna2` int DEFAULT NULL, PRIMARY KEY (`ID`) ); CREATE TABLE `tabela_historia` ( `id` INT NOT NULL AUTO_INCREMENT AUTO_INCREMENT, `id_tabela` INT NOT NULL, `zmiana` enum('insert','update','delete') NOT NULL, `czas` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `kolumna1` varchar(16) DEFAULT NULL, `kolumna2` int DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TRIGGER `tabela_update` AFTER UPDATE ON `tabela` FOR EACH ROW BEGIN INSERT INTO tabela_historia (id_tabela, zmiana, kolumna1, kolumna2) VALUES (NEW.id, 'update', NEW.kolumna1, NEW.kolumna2); END; MySQL zwrócił komunikat: Dokumentacja #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5 Cytuj Odnośnik do komentarza
Misiek Napisano 30 Sierpnia 2019 Udostępnij Napisano 30 Sierpnia 2019 insert, update, delete to zastrzeżone wyrażenia w MySQL i musisz je podać w `` zamiast w '' Cytuj Odnośnik do komentarza
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.