Ключевые поля таблиц, что лучше?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Всем привет! Посоветуйте плииз, пишу базы, сама база в mdb, использую Adoquery для подключения, в самой базе никаких настроек связи и т.д. не делаю, использую только как массив для хранения данных и удобного обращения к полям. А вот все связи я прослеживаю уже в самой программе.
А теперь суть вопроса, какой тип полей лучше использовать для связи данных? Числовой, или по факту? Вот пример числового
key=счетчик
name=текстовый
Таблица 1
key name
1 а
2 б
3 в
Таблица 2
key таб1.key name
1 2 й
2 3 ц
3 1 у
Или по факту, c условием что поле уникально
Таблица 1
key name
1 a
2 б
3 в
Таблица 2
key таб1.name name
1 а й
2 в г
3 б е
Какой из вариантов все лучше? Если все таки первый, то поле счетчик скольки разрядный? До какого предела он может считать?
А теперь суть вопроса, какой тип полей лучше использовать для связи данных? Числовой, или по факту? Вот пример числового
key=счетчик
name=текстовый
Таблица 1
key name
1 а
2 б
3 в
Таблица 2
key таб1.key name
1 2 й
2 3 ц
3 1 у
Или по факту, c условием что поле уникально
Таблица 1
key name
1 a
2 б
3 в
Таблица 2
key таб1.name name
1 а й
2 в г
3 б е
Какой из вариантов все лучше? Если все таки первый, то поле счетчик скольки разрядный? До какого предела он может считать?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
столько не живут" писал(а):До какого предела он может считать?


-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
А потом эти ключи есть возможность менять у записей каким-нибудь способом, не удаляя запись?
Дело в том что на практике встречаются ошибки пользователя программы,например пользователь выбрал не ту запись и есть ли возможность потом поправить?
Дело в том что на практике встречаются ошибки пользователя программы,например пользователь выбрал не ту запись и есть ли возможность потом поправить?
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
В любой базе данных без foreign key constraints существуют несвязанные данные - Т.КайтDr_Grizzly писал(а):Всем привет! Посоветуйте плииз, пишу базы, сама база в mdb, использую Adoquery для подключения, в самой базе никаких настроек связи и т.д. не делаю, использую только как массив для хранения данных и удобного обращения к полям. А вот все связи я прослеживаю уже в самой программе.
2B OR NOT(2B) = FF
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Зачем? Идентификатор записи должен быть уникален, однажды выданный никому больше не присваивается. Во многих системах ничего толком и не удаляется... Просто помечается на удаление" писал(а):потом эти ключи есть возможность менять у записей каким-нибудь способом, не удаляя запись

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
А представьте какого размера будет эта база где будут только помеченные на удаление объекты???
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
во-первых зависит от базы. во-вторых я говорил о том случае, когда ТЗ запрещает удалять объекты, либо требуется вести логи (что ещё больше раздует базу
)
Пользователь - существо не разумное, он может поудалять такое, что потом разработчика просто распнут
Возвращаясь к теме. Никто не запрещает удалять данные, просто нет никаких проблем с тем, что Id записей будут не последоватьены. Главное - уникальны

Пользователь - существо не разумное, он может поудалять такое, что потом разработчика просто распнут

Возвращаясь к теме. Никто не запрещает удалять данные, просто нет никаких проблем с тем, что Id записей будут не последоватьены. Главное - уникальны

-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Зато можно будет раз в полгода объезжать все старые работы, чистить базы и получать за это денюжку.Dr_Grizzly писал(а):А представьте какого размера будет эта база где будут только помеченные на удаление объекты???
2B OR NOT(2B) = FF
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Напрасно. Зачем изобретать велосипед? Вы тут затрагиваете вопрос каскадных обновлений значения ключа в связанных таблицах. Неужели Вы хотите это сами написать? Если эта тема интересна, мы можем пойти на доску по SQL и обсудить вопросы проектирования СУБД." писал(а):в самой базе никаких настроек связи и т.д. не делаю, использую только как массив для хранения данных и удобного обращения к полям. А вот все связи я прослеживаю уже в самой программе.
Теперь по ключам.
1) Естественный первичный ключ. Если во вводимых данных есть уникальный идентификатор (например в табл Сертификаты номер, который перепечатывается с гознаковского бланка), и если он числовой, то следует использовать его. Нечисловые (напр, текстовые) ПК допустимы в маленьких базах (Если строк, скажем, до нескольких тысяч, то разница в производительности не будет обнаруживаться)
Бывает, что уникальной бывает комбинация значений (например, серия+номер документа). Такой ключ называется суррогатным. Не стоит делать его первичным (пусть будет вторичным)
2) Искусственный ПК.
2.1) Счетчики и Автоинкременты. В базах MS Jet (то бишь Access) они обладают единственным недостатком - их нельзя изменить, однако, как тут уже заметили, это внутренние данные, которые конечному пользователю вообще не должны показываться, а следовательно, и не возникает необходимости в их изменении. За динамический диапазон типа Длинное целое можете не беспокоиться - разрядности хватит для любой прикладной задачи. Чтобы исчерпать Longint вам потребуется раз в секунду добавлять записи на протяжении более 130 лет!
2.2) GUID (В Access он называется Код репликации). Надо использовать если копии базы (реплики) будут раздаваться агентам, работающим независимо друг от друга, чтобы обеспечить уникальность ключей и возможность синхронизации баз агентов с единой централизованной базой.
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Во-во-во! Можно тут по подробнее! В моем случае постронение по суррогатным ключаем решает проблему объединения нескольких баз в одну. Т.е. на нескольких машинах люди забивают информацию в однинаковые по структуре базы. Каждый месяц я эти базы объединяю в одну и у меня нет накладок со связями при таком построении. Дак вот, как граммотно построить GUID ключ? И как с ним общаться в коде." писал(а):2.2) GUID (В Access он называется Код репликации). Надо использовать если копии базы (реплики) будут раздаваться агентам, работающим независимо друг от друга, чтобы обеспечить уникальность ключей и возможность синхронизации баз агентов с единой централизованной базой.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD
