Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Вычисление ключа   Найти похожие ветки 

 
Atanas   (2004-02-25 11:32) [0]

Доброго времени суток Всем,

Ситуация следующая: Есть таблица населенных пунктов (Settlements)
в нем ключевое поле - SID, код области - SRegion, и т.д.
Как сделать так, чтобы при заполнении записи пользователем SID - генерировался программно по следующему правилу:Первая цифра это код области, а три остальные просто автоинкремент.
Как это можно сделать?


 
Соловьев ©   (2004-02-25 11:35) [1]

а почему обязательно одно поле? два сделай


 
Atanas   (2004-02-25 11:41) [2]

Это не рационально - каждая таблица использующая эту как справочник должна будет тоже иметь 2 поля ключа вместо одного.


 
Соловьев ©   (2004-02-25 11:45) [3]

в чем не рациональность? в трате дискового пространства?


 
Кщд   (2004-02-25 11:46) [4]

очень даже рационально, коли есть нужда в выборке статистики по каждой области отдельно.

"Первая цифра это код области" - прямо-таки цифра? :)


 
Atanas   (2004-02-25 11:50) [5]

Объем да и скорость... Ну не суть в Access это сделать доволно таки легко. В событие до обновления прописываешь типа:
SID=SRegion+DMAX("SID","Settlements","SID<"&Sregion*1000)
(если без проверок) и все работает. А тут ума не приложу :-(


 
Atanas   (2004-02-25 11:52) [6]

To Кщд - Там где будет использоваться программа областей на страну всего 7 из них филиалы конторы только в 4. ;-)


 
Sandman25+1   (2004-02-25 11:59) [7]

[6] Atanas   (25.02.04 11:52)

Ага, а потом понадобится сделать фильтр по региону, и Вы будете спрашивать, как получить первую цифру числа? :)
Делайте 2 поля и не морочьте себе и другим людям голову :)


 
Anatoly Podgoretsky ©   (2004-02-25 12:15) [8]

С таким сурогатным полем хлебнешь горя по обеспечению целостности и затруднения при выборках


 
Atanas   (2004-02-25 12:42) [9]

To: Sandman25+1 -
1. Это не очень то и вежливо с вашей стороны.
2. Я просил помощи, а получил философские размышления о том как все вы круты
3. Неужели это так сложно ответить?


 
Sandman25+1   (2004-02-25 12:45) [10]

[9] Atanas   (25.02.04 12:42)

Прошу прощения за форму моего сообщения.
Но еще раз обращаю Ваше внимание на тем не менее верную суть того же сообщения. Не той тропинкой идете. Придется использовать генератор или какой-то еще источник уникальных чисел, например, таблица с 1 полем и 1 записью, которая локируется, поле инкрементируется, считывается и таблица освобождается.


 
Johnmen ©   (2004-02-25 12:49) [11]

Уже ответили. Резюме:
1. Есть уникальный идентификатор населенного пункта - автоинк. поле, первичный ключ.
2. Есть неуникальный идентификатор области для нас.п. - ссылочный ключ.

Другие варианты по большей степени сплошное извращение и гиморой себе на голо... тьфу ! на задницу...
:)


 
Atanas   (2004-02-25 12:53) [12]

Можно же получать новый код из предыдущего. Например запрос на нахождение максимального SID для нужного региона. Находим и увеличиваем на единицу.
Из всего того что было сказано ранее я не могу найти как реализовать функцию поиска по подмножеству типа: DMAX, DMIN, DLOOKUP... и т.д. в Delphi + ADO
Буду очень благодарен за информацию


 
Sandman25+1   (2004-02-25 12:55) [13]

[12] Atanas   (25.02.04 12:53)

При многопользовательской работе будут проблемы, и большие.


 
Johnmen ©   (2004-02-25 12:55) [14]

Можно, но не нужно, т.к. это ещё один путь к гиморою в многопользовательской системе...


 
Atanas   (2004-02-25 12:58) [15]

To: Johnmen

Классно. Резюме:
Если в каждой области будет заполняться такая таблица то при их объединении об уникальности такого уникального ключа можно забыть?


 
Johnmen ©   (2004-02-25 13:02) [16]

>Atanas   (25.02.04 12:58) [15]

Вот наконец-то выясняется, что нужна репликация. Сразу сказать было сложно ?

В этом случае будет один уникальный ключ по указанным двум полям.


 
Sandman25+1   (2004-02-25 13:03) [17]

[15] Atanas   (25.02.04 12:58)

Если планируется объединение, то уникальной должна быть совокупность полей Integer и region. Причем для Integer нужно будет использовать генератор или его аналог, автоинкремент уже не подходит, потому что это поле не должно быть неуникальным.


 
Atanas   (2004-02-25 13:22) [18]

To: Johnman
Не было речи про репликацию. Простое объединение данных репликацией не называется.


 
Anatoly Podgoretsky ©   (2004-02-25 13:26) [19]

Atanas   (25.02.04 13:22) [18]

А вот в Atanas   (25.02.04 12:58) [15] это и есть репликация данных.



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
14-1077810262
Домарощинер
2004-02-26 18:44
2004.03.28
HDD space


6-1073649790
Iks
2004-01-09 15:03
2004.03.28
Как отправить звук от микрофона по сети


3-1077280557
TATIANA
2004-02-20 15:35
2004.03.28
Как пометить несколько записей в GRID


3-1077629735
Desdechado
2004-02-24 16:35
2004.03.28
Странное поведение в TClientDataset


14-1077969040
Типа... Ламер и всё такое..
2004-02-28 14:50
2004.03.28
WinXP