Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Index z jednej tabeli indexem w drugiej
maqlik
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 12.10.2009

Ostrzeżenie: (0%)
-----


Przede wszystkim witam forumowiczów!

Czytałem wiele artykułów jak i kursów ale na swój problem nadal nie znalazłem rozwiązania. Mniej więcej problem polega na tym:
W MS SQL 2008 Express mam pewną tabele (przyjmę że nazywać się będzie Tabela1). Chciałbym do tej tabeli dodać jeszcze jedną kolumnę ale z względu iż jest to tabela systemowa (programu księgowego) to chciałbym utworzyć drugą tabelę... w tym miejscu jest problem gdyż Tabela1 zawiera 2 kolumny (ID i Nazwa), a ja chcę dodać jeszcze 'Kategorie'. Jak mogę stworzyć nową tabelę (Tabela2) która miała by 3 kolumny ID = Tabela1.ID, Nazwa = Tabela1.Nazwa i Kategoria? Wiem że mogę użyć INSERT do wklejenia tych kolumn ale w przypadku gdy w Tabeli1 pojawią się zmiany to Tabela2 ich nie uwzględni.

Proszę o pomoc dla laika o ile to możliwe

i z góry dziekuję
Marcin
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
Theqos
post
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 8
Dołączył: 5.12.2008

Ostrzeżenie: (0%)
-----


Utwórz sobie tabele z kluczem obcym tabela1_id i kolumna kategoria. Kolumna z nazwą jest ci niepotrzebna bo przecież już jest w tabeli 1. Potem pobierasz dane z dwóch tabel za pomocą jednego joina i nie musisz nic synchronizować. Poza tym o co ci chodzi z tym indeksem?
Go to the top of the page
+Quote Post
Gapollo
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 5
Dołączył: 2.11.2006
Skąd: 52.259 °N, 21.020 °E

Ostrzeżenie: (0%)
-----


Założenie tabeli z kluczem obcym może zaburzyć działanie programu księgowego podczas usuwania rekordów z tabeli1. Tak jak pisze Theqos najrozsąniejszym wyjściem jest tabela2 z polami id, kategoria. Jeśli bardzo zależy Ci na polu nazwa w tabeli2 to proponuję taki kod do synchronizacji tabel:
  1. INSERT INTO tabela2 (id,nazwa) SELECT id,nazwa FROM tabela1 WHERE id NOT IN (SELECT id FROM tabela2) -- nowe rekordy
  2. DELETE FROM tabela2 WHERE id NOT IN (SELECT id FROM tabela1) -- usunięte z tabela1
  3. UPDATE t2 SET nazwa=t1.nazwa FROM tabela1 AS t1 JOIN tabela2 AS t2 ON t1.id=t2.id WHERE isnull(t1.nazwa,'')<>isnull(t2.nazwa,'') -- "poprawienie" nazwy

Jeśli przed modyfikacją tabeli1 powstrzymywało Cię coś innego niż warunki licencji to można rozbić to wpasować w trzy triggery i w przypadku insert i update używać tabel inserted i updated w celu optymalizacji.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.06.2026 - 15:36