русский
Germany.ruForen → Архив Досок→ Programmierung

ID field

695  1 2 3 4 alle
  moose свой человек09.11.17 09:48
09.11.17 09:48 
Zuletzt geändert 09.11.17 09:50 (moose)

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

сейчас нужно сконфигурировать базу, желательно хорошо (что бы это означало? : ). и вот вопрос, на который гугл выдает море ссылок на обсуждения и мнения. вопрос такой: нужно ли каждой таблице иметь нечто "идентификатор"? возьмем для примера базу "путевых листов". каждое авто в парке и каждый водитель должны иметь ид, т.к. иначе в каждой записи о поездке нужно было бы прописывать эти данные. но вот должна ли запись о поездке содержать такое поле (на всякий пожарный)? у меня похожий случай: я не собираюсь (пока) его нигде использовать, городить лишние поля, понимаю, плохой стиль, но что-то не дает оставить таблицу без такой штуки.

что ваш опыт говорит на эту тему?

#1 
Murr патриот09.11.17 10:06
Murr
NEW 09.11.17 10:06 
in Antwort moose 09.11.17 09:48

что ваш опыт говорит на эту тему?

------

По умолчанию: таблица идет с суррогатным первичным ключом.

Мало того, имена первичных ключей, имена вторичных ключей и типы данных для ключей - регламентированы.

Отсутствие ключа или другие несоответствия - оговаривается дополнительно.

Код пишется под заданную ключами структуру.

Пользовательские поля - отдельно.


городить лишние поля, понимаю, плохой стиль

-----

???

Плохой стиль - это когда надо думать как апдейтнуть запись которая без ключа.

#2 
  moose свой человек09.11.17 11:05
NEW 09.11.17 11:05 
in Antwort Murr 09.11.17 10:06, Zuletzt geändert 09.11.17 11:08 (moose)
Плохой стиль - это когда надо думать как апдейтнуть запись которая без ключа.

а что толку, если мы имеем такой "ключ", который называется ID, и значений которого нигде кроме этой таблицы не встречается? если уж ключ, так мы должны как-то снаружи таблицы его иметь возможность иметь/получить, иначе какой в нем толк? в моем примере это могло бы быть сочетание датапоездки+автомобиль/водитель+индекспоездки (если предположить, что водитель развозит, например, пиццу, и делает несколько поездок в день. тогда мы знаем дату, водителя (или транспорт), а индексы будем просто перебирать подряд, пока не обнаружим, что запись отсутствует. в таком ключе была бы польза, а просто индекс, которого мы не знаем - не понимаю. или иметь не по одной записи на поездку в таблице, а по одной записи на список поездок за день, тогда и индекс отпадает.

#3 
Simple Nothing is f*cked09.11.17 12:16
Simple
NEW 09.11.17 12:16 
in Antwort moose 09.11.17 09:48

Пару раз натыкался на проблемы с композитными ID-ключами (hibernate, doctrine). С тех пор всегда делаю для таблицы ID.

#4 
MrSanders старожил09.11.17 12:34
NEW 09.11.17 12:34 
in Antwort moose 09.11.17 09:48

Мой опыт говорит всегда использовать ID в таблицах. Исключение - таблицы для one-to-many или many-to-many отношений.

1. Для будущего. Добавить ID в начале - дешевео. Добавлять потом, когда надо будет где-то ссылку на запись делать - дорого.

2. "принцип однообразия" (least astonishment) - позовляет хотя бы частично автоматизировать операции с БД

3. разделение между техническим (ID) и логическим (водитель-машина-время) ключом. Логический меняется чаще.

4. ну и скорость / удобство. В MsSQL замена композитного ключа из 7! полей на ID (int) ускорило один сложный select примерно в 20 раз. Вместо 2 минут стал за 5-7 секунд отрабатывать. Писать join-ы тоже попроще становится, да.

#5 
  moose свой человек09.11.17 12:38
NEW 09.11.17 12:38 
in Antwort Simple 09.11.17 12:16

я понимаю. если в фреймворке глючит какая-то фича, приходится от нее отказываться. но что вы затем делаете с этими ID? тогда уж вовсе создавать таблицу без ключа.


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

а водителям придется тогда раздавать этот идентификационный номер, но мы тогда потребует дополнительных усилий/ресурсов поиск водителя по фио+датарождения.

#6 
Vovan(ator) коренной житель09.11.17 12:39
Vovan(ator)
NEW 09.11.17 12:39 
in Antwort Murr 09.11.17 10:06
Плохой стиль - это когда надо думать как апдейтнуть запись которая без ключа.

В принципе да.

Но если база не особо-большая, то вполне можно обойтис и без ID.


К примеру, если в парке все машины имеют какой-нибудь индивидуальный номер,

к примеру из техпаспорта.

То можно в принципе этим номером и пользоваться.

Только вот проблемка возникает (это для информации ТС).

Если ID может быть 3 - 4 значная,

то номер двигателя или другой номер, обычно это забор из кучи букв и цифр смущ.


Так же как ключь (ID) можно использовать и комбинацию из нескольких полей,

но это вообще геммморой получится.


Так что лучше использовать ID в каждой таблице.

Это упрощает работу и как уже выше Murr сообщил, без ID это плохой стиль.


Вообще, оптимальный вариант, это когда БД соответствует третьей нормальной форме.

#7 
Simple Nothing is f*cked09.11.17 12:42
Simple
NEW 09.11.17 12:42 
in Antwort moose 09.11.17 12:38

ID нужны для связи таблиц по foreign key и генерируются базой на лету (или еще как-то). Никаким водителям их раздавать не надо - поиск так и идет по номеру.

#8 
  moose свой человек09.11.17 12:46
NEW 09.11.17 12:46 
in Antwort MrSanders 09.11.17 12:34

вернусь к моему примеру. для меня в таблице поездок поле ID было бы оправданно в единственном случае, если мы не можем исключить, что захотим иметь таблицу, куда захотим внести ссылку на поездку. во всех остальных случаех этот ID бесполезен. в одном посте на одном из форумов прочел, что человек всегда создает это поле. это имеет то преимущество, что он экономит время на обдумывание решения, нужно оно или нет : )

#9 
  moose свой человек09.11.17 12:52
NEW 09.11.17 12:52 
in Antwort Simple 09.11.17 12:42

когда существует связь таблиц - все понятно: в таблице поездок - ID водителя, и по нему быстро ищется водитель в таблице водителей. но если нам нужно найти водителя "снаружи", по фио, то нужно перерыть всю таблицу, причем до конца, а не пока не наткнемся, т.к. ивановиваниваныч может оказаться не уникальным. или должны выучить его ID : )

#10 
Vovan(ator) коренной житель09.11.17 13:07
Vovan(ator)
NEW 09.11.17 13:07 
in Antwort moose 09.11.17 12:52
может оказаться не уникальным. или должны выучить его ID : )

Вы сейчас программную логику обсуждаете?

или всё же ход действий человека, который должен найти этого водилу через программу?


Если первое, то через ID программа найдёт кого угодно.


Если же второе, то человек ищет обычно по дугим критериям,

к примеру по имени или фамилии, или обоим.

ID ему абсолютно не нужны (она используется преимущественно только программой).

#11 
Murr патриот09.11.17 13:18
Murr
NEW 09.11.17 13:18 
in Antwort MrSanders 09.11.17 12:34

Исключение - таблицы для one-to-many или many-to-many отношений.

-----

Есть соответствующие типы реляций - промежуточные таблицы не обязательны.

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

#12 
Murr патриот09.11.17 13:24
Murr
NEW 09.11.17 13:24 
in Antwort moose 09.11.17 11:05

а что толку, если мы имеем такой "ключ", который называется ID, и значений которого нигде кроме этой таблицы не встречается?

-----

И в таблице всего три строки...


если уж ключ, так мы должны как-то снаружи таблицы его иметь возможность иметь/получить, иначе какой в нем толк?

-----

А разве что-то мешает?


в моем примере это могло бы быть сочетание датапоездки+автомобиль/водитель+индекспоездки (если предположить, что водитель развозит, например, пиццу, и делает несколько поездок в день. тогда мы знаем дату, водителя (или транспорт), а индексы будем просто перебирать подряд, пока не обнаружим, что запись отсутствует. в таком ключе была бы польза, а просто индекс, которого мы не знаем - не понимаю. или иметь не по одной записи на поездку в таблице, а по одной записи на список поездок за день, тогда и индекс отпадает.

-----

Водитель - уволился, машину - списали. Соответствующие записи в таблицах Машины и Водители - удалили.

И это... тебя никто не заставляет пользовать индекс для выборки...

Но это придет с опытом.

#13 
MrSanders старожил09.11.17 13:27
NEW 09.11.17 13:27 
in Antwort moose 09.11.17 12:38
воспользуюсь моим примером. допустим, машины имеют уникальный номерной знак, который мы можем определить ключом в таблице машин.

Предположим мы хотим связать водителя с одной машиной. К одной машине могут быть приписано несколько водителей, водитель всегда только к одной машине. Как мы такое в БД представим? В таблице ВОДИТЕЛЬ будет колонка МАШИНА_ID в которой стоит уникальный ID машины. МАШИНА_ID определена в БД как foreign key ссылающийся на MAШИНА.ID с правилом каскадирования "если на ID есть ссылка, запретить удаление записи из МАШИНА" (DELETE RESTRICT). Позволяет нам на уровне БД добиться целостности данных - не полусится удалить машину оставив водителя, который на ней работать должен.

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

1. ID машины = номерной знак. Просто UPDATE в том же DB2 не пройдет - иззя менять ключи, на которые ссылается запись. Меняем все записи в ВОДИТЕЛЬ, которые на нее ссылаются, меняем номер, опять меняем все записи теперь с новым номером.
2. ID машины - технический. int. Просто UPDATE с новым номером. Всё.

#14 
Murr патриот09.11.17 13:29
Murr
NEW 09.11.17 13:29 
in Antwort moose 09.11.17 12:38

который мы можем определить ключом в таблице машин

-----

Термин "сурогатный ключ" тебе что-нибудь говорит?

Я вообще плохо понимаю, как можно интегрированность данных поставить в зависимость от введенных пользователем данных.


машины имеют уникальный номерной знак

-----

В пределах страны, надеюсь... ведь границу на машине никто не пересекает...

К тому же, на моей памяти были разные знаки на одной и той же машине и были одни и те же знаки на разных машинах...

#15 
MrSanders старожил09.11.17 13:34
NEW 09.11.17 13:34 
in Antwort moose 09.11.17 12:46
вернусь к моему примеру. для меня в таблице поездок поле ID было бы оправданно в единственном случае, если мы не можем исключить, что захотим иметь таблицу, куда захотим внести ссылку на поездку. во всех остальных случаех этот ID бесполезен.

Не только. Изменять значения записи проще имея технический ID (который просто-напросто никогда не меняется). Хотим в гуях иметь возможность скорректировать время поездки. Как искать запись, которой UPDATE делать?

в одном посте на одном из форумов прочел, что человек всегда создает это поле. это имеет то преимущество, что он экономит время на обдумывание решения, нужно оно или нет : )

И это тоже. Однообразность помогает.

#16 
Murr патриот09.11.17 13:42
Murr
NEW 09.11.17 13:42 
in Antwort Vovan(ator) 09.11.17 12:39

Но если база не особо-большая, то вполне можно обойтис и без ID.

-----

Эээ... А как ты определишь размер базы до того как ее начнут эксплуатировать?

У меня есть небольшая база - содержит информацию для трансляции внешних документов.

Сколько и каких - Я не знал тогда, не знаю сейчас и не буду знать в будущем - мне

просто пришлют файлик и скажут - Ура, у нас НОВЫЙ клиент... и у него новый

формат документа.

НУ напишу Я то что мне надо для обработки нового документа и будет програмка добавлять

что ей надо в базу. Сколько и чего - Я не знаю. И даже когда будет написано - не буду знать.

Вопрос - как мне починить все это после ошибки оператора - ну вбили что-то не туда и теперь

в выходном документе что-то не соответствует. Ничего не падает, ничего не ломается, просто

на выходе - не то.

Записей там не много... какая-нибудь пара тысяч... а для внутреннего пользования синтезируется

условный ключ - текстовый, длина 4Кб, содержит смесь фрагментов описаний разных используемых

материалов. Ну вот надо найти "не правильную" запись и поправить. Что Я там буду делать без ИД?


#17 
Murr патриот09.11.17 13:47
Murr
NEW 09.11.17 13:47 
in Antwort Vovan(ator) 09.11.17 13:07

ID ему абсолютно не нужны (она используется преимущественно только программой).

-----

Не просто не нужны, а пользователь никогда не должен их видеть. Вообще.

Бо, это не для него, а для программиста - чтобы не болела голова...

#18 
Vovan(ator) коренной житель09.11.17 13:52
Vovan(ator)
NEW 09.11.17 13:52 
in Antwort Murr 09.11.17 13:42
Что Я там буду делать без ИД?

И я про то же.

С ID намного проще.

Я в принципе во всех БД, которые я планирую, всегда в каждой таблице делаю ID.

Даже если и нет особой необходимости, эта колонка облегчает работу.

#19 
  moose свой человек09.11.17 18:15
NEW 09.11.17 18:15 
in Antwort moose 09.11.17 09:48

попалась вот такая интересная читалка:


http://www.agiledata.org/essays/keys.html


ладно, с ID вроде ясно, что ничего не ясно. т.е. нужно смотреть в каждом конкретном случае.

у меня еще есть вопрос (ы) касательно баз данных, попробую их задать прямо в этой ветке, хотя они уже не касаются непосредственно ID. просто не хочу темы плодить.


я в данный момент делаю небольшой проект(ик), и в качестве базы данных использую .NET System.Data.DataSet class. объем данных ожидаю небольшой (?), справляется нормально пока.

но думаю, чем это мне грозит в случае, если данных окажется больше, чем кажется сегодня?

поэтому есть размышления на тему переключиться на какую-нибудь базу данных. посоветуйте что-нибудь вроде такого, из этого списка.


https://blog.capterra.com/free-database-software/


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

да, никаким комьюнити показывать что-то не собираюсь и продавать продукт не собираюсь. это я, прочитав такое:


you don’t have to pay for MySQL but that still doesn’t that there’s no price.
The price is stated by GNU license under which MySQL community edition is released meaning that you need to reveal you source code under the same terms and give it to the community.
Be aware of that fact if you plan to use for commercial project.


кто-нибудь имеет опыт работы с простыми бесплатными базами? посоветуйте что-нибудь.

#20 
Simple Nothing is f*cked09.11.17 20:01
Simple
NEW 09.11.17 20:01 
in Antwort moose 09.11.17 18:15

Sqlite можно посмотреть.

#21 
Murr патриот09.11.17 20:10
Murr
NEW 09.11.17 20:10 
in Antwort moose 09.11.17 18:15

посоветуйте что-нибудь.

-----

Какая система? Юникс или Винда?

Для винды не надо думать - Мс СКЛ.

Для юникса - нее знаю...

#22 
  moose свой человек09.11.17 20:29
NEW 09.11.17 20:29 
in Antwort Murr 09.11.17 20:10

на самом деле free & simple? может, oracle тогда уже? ibm informix?

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

mysql пока лучше всего подходит, т.к. когда-то уже использовал (более 10 лет уже, правда).

эх, скорее всего на .net system.data.dataset логичнее всего остановиться : (


а такое кто-нибудь использовал?

https://www.valentina-db.com/en/

спрашиваю потому что знаком лично с разработчиками (с Русланом Засухиным - нет).

#23 
Murr патриот09.11.17 21:03
Murr
NEW 09.11.17 21:03 
in Antwort moose 09.11.17 20:29

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

------

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

Остальное... если Винда стоит - большая часть Мс Скл уже установлена... для внутренних нужд.

Остальное - бесплатное, включая Ентерприсе Манагер для управления этим хозяйством.

Насколько тяжелое для машины - фиг его знает - это от машины.


.net system.data.dataset

-----

Это не база.

#24 
  moose свой человек09.11.17 21:09
NEW 09.11.17 21:09 
in Antwort moose 09.11.17 20:29, Zuletzt geändert 09.11.17 21:10 (moose)

естьOracle Database XE 11 g Express Edition.

имеет некоторые для меня несущественные ограничения, но вот такое просто любопытно:


Other
Upon 45 days written notice Oracle may audit the use of the program. You agree to cooperate with Oracle's audit and provide reasonable assistance and access to information. You agree that Oracle shall not be responsible for any of your costs incurred in cooperating with the audit.

как они представляют себе этот аудит?

#25 
Simple Nothing is f*cked11.11.17 17:42
Simple
NEW 11.11.17 17:42 
in Antwort moose 09.11.17 21:09

Это оверкилл имхо.

Вообще можете взять любую базу, для которой есть docker image. Запускаете контейнер, ничего инсталлировать не надо.

#26 
AlexNek патриот11.11.17 23:17
AlexNek
NEW 11.11.17 23:17 
in Antwort moose 09.11.17 18:15

Что то мне кажется, что будет достаточно и ентого

https://www.codeproject.com/Articles/13854/Using-XML-as-Da...

#27 
  moose свой человек13.11.17 16:19
NEW 13.11.17 16:19 
in Antwort Simple 09.11.17 20:01
Sqlite можно посмотреть.

очень интересный вариант.

обещаемые фичи:


Full-featured SQL
Billions and billions of deployments
Single-file database
Public domain source code
All source code in one file (sqlite3.c)
Small footprint
Max DB size: 140 terabytes (247 bytes)
Max row size: 1 gigabyte
Faster than direct file I/O
Aviation-grade quality and testing
Zero-configuration
ACID transactions, even after power loss
Stable, enduring file format
Extensive, detailed documentation
Long-term support

бегло просмотрел, не смог найти, можно ли еще чем-нибудь доступиться к файлам базы в случае надобности, без библиотек самой базы. но это может оказаться и неважным, если библиотеки удобные.


#28 
  moose свой человек13.11.17 16:22
NEW 13.11.17 16:22 
in Antwort Simple 11.11.17 17:42

пошел на сайт https://docs.docker.com/get-started/ (вы это имеете ввиду?), там пишут, что для того, чтобы это пользовать (их хэлло уорлд запустить, например), нужно инсталлировать docker : (.

похоже, в этом случае еще и эту технологию нужно будет осваивать?

#29 
Simple Nothing is f*cked13.11.17 16:26
Simple
NEW 13.11.17 16:26 
in Antwort moose 13.11.17 16:22

Эта технология стоит того, чтобы ее освоить.

#30 
  moose свой человек13.11.17 17:27
NEW 13.11.17 17:27 
in Antwort Simple 13.11.17 16:26, Zuletzt geändert 13.11.17 17:27 (moose)

запомнил. учту. спасибо.

#31 
AlexNek патриот13.11.17 22:52
AlexNek
NEW 13.11.17 22:52 
in Antwort moose 13.11.17 16:19

Мы купили

https://www.devart.com/dotconnect/sqlite/editions.html

и к нему бесплатно идет.

https://www.devart.com/entitydeveloper/

Но если нужно меньше 10 таблиц, то можно все бесплатно

Linq2Sql пользоваться довольно удобно.

Ента тулза тоже нравится

https://sqlitestudio.pl/index.rvt

#32 
  moose свой человек17.11.17 15:53
NEW 17.11.17 15:53 
in Antwort moose 13.11.17 16:22, Zuletzt geändert 17.11.17 21:12 (moose)

новый вопрос. попробую дальше эксплуатировать нашу "базу данных автобазы".

устроено так, что при вводе новой поездки по номеру машины ищется имеющаяся, а если не находим, создаем новую запись и ее ид заносим в запись поездки. что должно произойти, если при вводе произошла опечатка, и ошибочно была добавлена в базу несуществующая машина? например, вместо имеющегося номера ХХ АА 790 ввели ХХ АА 700? если ничего не предпринимать, то в базе появится несуществующая машина. допустим, кто-то это усек. как теперь выбросить эту машину из базы, при этом перенаправив ссылки на "правильную"?

идеально было бы распознать при вводе подобие ключей и запросить подтверждения, что ключ новый, преложив как альтернативу выбрать из списка похожих. но если ключ - не машина, а водитель, то как найти подобие "иванова ивана ивановича" и "иванова и.и.", "и.и. иванова", "и. ивн" и пр?


следующий вопрос. какие имеются способы наименее болезненного добавления колонки в таблицу? и вообще рефакторинг? напрашивается "прямой путь": создать еще одну ("правильную") базу написать конвертор, который перенесет все данные в новую базу, заполняя новое поле некими дефолтными значениями. возможно, можно ограничиться созданием только "правильной" таблицы, куда все перекачать, затем переименовать обе. имеют ли "хорошие субд" средства для этого?

#33 
Murr патриот17.11.17 16:31
Murr
NEW 17.11.17 16:31 
in Antwort moose 17.11.17 15:53

как теперь выбросить

------

Поменять ссылочный ИД на нужный.


имеют ли "хорошие субд" средства для этого?

------

Разумеется.

#34 
Wanderer_ посетитель18.11.17 13:46
NEW 18.11.17 13:46 
in Antwort moose 17.11.17 15:53

У вас в БД имеется три сущности (Entity): машина, поездка и водитель. Я бы посоветовал использовать вам для любой таблицы своё ID, тогда не будет проблем как в вашем случае с машинными номерами. KFZ-Nummer можно завести как unique, чтобы небыло проблем. То есть у вас в БД на каждую сущность должна быть своя таблица. Если у вас отношения (relation) между сущностями n:m ( каждый водитель может ездить на любой машине) то в этом случае нужна дополнительная таблица, где вы эти соотнощения сохронятете (fahrer_id,fahrzeug_id, reise_id ). При неправильном выборе машины , вы можете легко помянять машину, заменив fahrzeug_id на привильный номер.

#35 
  moose свой человек18.11.17 16:50
NEW 18.11.17 16:50 
in Antwort Wanderer_ 18.11.17 13:46

я правильно вас понял? вы предполагаете, что, вводя "путевку", оператор не может "автоматически" ввести новую машину, водителя и пр.: добавление машин/водителей должны быть отдельными операциями, а при вводе путевок можно только выбрать из списка имеющихся? вроде логично, тогда проблема не возникает.

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


о выборе субд. загрузил сегодня у оракла Oracle Database XE (11g). при установке предупредило, что понадобится ~600 мб на диске. но когда установилась, директорий получился чуть больше 2 гб : ).

но это еще не энд ов дэ стори: пошел юзать/осваивать их юзырьинтерфейс, оказалось, что создать схему я с могу только из командной строки. а если хочу "как люди", то должен еще установить их SQL Developer, зазипованная инсталляция которого более 400 мб. но я прежде чем деинсталлировать все-таки пойду чуть дальше: инсталлирую таки этого дэвэлопэра и поиграюсь. пока впечатление, что все очень громоздко, на каждый пук диск долго тарахтит, окошки переключаются меееееееедленно, хотя я еще ничего не создал. поглядим, может только запрягает долго?

#36 
Murr патриот18.11.17 18:20
Murr
NEW 18.11.17 18:20 
in Antwort moose 18.11.17 16:50

SQL Develope

-----

Посмотри в сторону Devart Studio для оракла.

Пользуюсь - иногда проблемы, но у меня старые версии баз...

#37 
Wanderer_ посетитель18.11.17 19:23
NEW 18.11.17 19:23 
in Antwort moose 17.11.17 15:53

Да, занесение новых обьектов в БД должно происходить оператором осознано. В GUI форме должна быть возможность занести нового водителя или машины (кнопочка "Новая машина" или "Новый водитель"). Ещё бы сделал окошко подсказки, где показывались возможные варианты из БД, например при вводе фамилии водителя.Это помогло бы оператору лучще ориентироваться и не плодить лишние обьекты.


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

При выборе БД я бы обратил внимание на следующие пункты:

1) Обьём данных

2) С каким типом данных нужно будет работать

3) Доступ к БД (только локальный или черезь сеть)

4) Количество клиентов, которые работают с БД

5) Какие нагрузки(обьём запрашиваемых данных) будут на ДБ и есть ли пиковые нагрузки

6) Есть ли удобный интерфейс для доступа к БД в языке программирования, в котором вы пишите.

7) Будет ли оплачивать клиент лиценции, если вы возьмёте коммерческую БД (не ударит ли это по стоимости продукта)

8) Удобство и простота администрирования


Успехов

#38 
  moose свой человек19.11.17 00:00
NEW 19.11.17 00:00 
in Antwort Wanderer_ 18.11.17 19:23

я и есть и заказчик, и исполнитель в этом проекте : (

#39 
AlexNek патриот19.11.17 00:34
AlexNek
NEW 19.11.17 00:34 
in Antwort Simple 13.11.17 16:26

Попал на конфренцию, так там пользование доскер так объясняли



#40 
AlexNek патриот19.11.17 00:47
AlexNek
NEW 19.11.17 00:47 
in Antwort moose 18.11.17 16:50
пошел юзать/осваивать их юзырьинтерфейс

Ой, только не окошки Оракла.

Сколько пользователей то будет одновременно?

Чёт я понял что один. Слишком уж большой прицеп прийдётся тащить к Ораклу. Или хранимые процедуры требуются?

#41 
Simple Nothing is f*cked19.11.17 10:29
Simple
NEW 19.11.17 10:29 
in Antwort AlexNek 19.11.17 00:34

:-D

#42 
Wanderer_ посетитель19.11.17 13:36
NEW 19.11.17 13:36 
in Antwort moose 19.11.17 00:00
я и есть и заказчик, и исполнитель в этом проекте : (

Идеальный вариант. Руки не связаны, только творить. :-)

#43 
  moose свой человек19.11.17 13:53
NEW 19.11.17 13:53 
in Antwort moose 19.11.17 00:00

задалбываюсь с SQL Developer. все их самые актуальные доки ссылаются на версии 2 и 3, а у меня скачалась 17. естественно, все организовано уже не так, найти ничего невомзможно, пользуясь их доками. дубовейшая вещь! не понимаю, как такая огромная компания, у которй немало ресурсов (я думаю), может такой неудобный продукт создать? тема, понимаю, сложная. но у меня уже палец на мыши дергаться от боли начинает. создаем новую колонку - она сразу создается с дефолтным идиотским именем колэмХ и типом варкар 20. т.е. если мы создаем несколько однотипных колонок тима намбэр, например, нам нужно каждый раз клацнуть на имя, оно при этом не выбирается, только фокус поле получает, мы сами должны это выбрать и переписать. затем выбрать желаемый тип из комбобокса типов. далее. час искал, как добавить рилэйшн на соседнюю таблицу. описанное в их туториалах не подходит - у меня нет этих контролов. интуитивно клацаю правой мышкой на колонку, оно предлагает все что угодно, кроме этого. наклацал (случайно! мне в голову не пришло такое, они могли еще выше - в схему это вынести : ), что единственный способ (может есть еще, но не видно) - клацнуть правой мышкой на ТАБЛИЦУ, откроется меню с предложением constraint->add foreign key, где прийдется имя колонки выбирать, что отпало бы, будь этот пункт сразу в меню колонки. кстати, если выбрать "редактировать таблицу" (клацнуть на иконку карандашика), то там тоже есть слева на выбор "constraints", который если выбрать, то видно созданные чужие ключи. но создать такой же отсюда - невозможно. в общем, додавлю эти несколько таблиц таки, затем попробую связаться из приложения с этой базой и что-нибудь с ней поделать. это просто потому что жаль уже потраченного времени, но в качестве решения, конечно, эту субд для моей цели применять не стану, что-нибудь попроще выберу, или останусь на том, что есть. не так удобно, но я скорее себе эти удобства сам за пару вечеров сделаю, чем осваивать дубовых монстров.

#44 
  moose свой человек19.11.17 13:55
NEW 19.11.17 13:55 
in Antwort Wanderer_ 19.11.17 13:36, Zuletzt geändert 19.11.17 13:58 (moose)

дело в том, что когда на заказ, есть сроки, ресурсы, и это "помогает принимать решения", т.к. продукт когда-то должен быть готов. и есть заказчик, который должен ответить на вопрос: тебе белыйверх/чорныйниз или наоборот. а когда сам для себя - можно творить вечно, проверить массу креативных идей, но в результате все просто надоест раньше, чем появится то, чем можно пользоваться : )

я, конечно, додавлю эту затею, слишком многообещающе выглядит (на данном этапе).

#45 
AlexNek патриот19.11.17 15:04
AlexNek
NEW 19.11.17 15:04 
in Antwort moose 19.11.17 13:53
задалбываюсь с SQL Developer.

Я правда уже успел забыть в каких случаях им пользовались, но оочень редко

А вот без Тоад-а и дня не обходилось

https://www.quest.com/products/toad-for-oracle/

хотя он дороговат.

Для NETa хорошо попробовать Devart

https://www.devart.com/dotconnect/oracle/

https://www.devart.com/entitydeveloper/


А это не то? 17.3 вроде

http://www.oracle.com/technetwork/developer-tools/datamode...

http://www.oracle.com/technetwork/developer-tools/sql-deve...

#46 
  moose свой человек19.11.17 18:32
NEW 19.11.17 18:32 
in Antwort AlexNek 19.11.17 15:04
А это не то? 17.3 вродеhttp://www.oracle.com/technetwork/developer-tools/sql-deve...

ну да, именно "вроде" : ) идем по ссылочке, видим рилиз нотз на 17 и ссылочку на доку:


http://www.oracle.com/technetwork/database/enterprise-edit...


идем туда и видим то что там есть : (

именно на это попадаем, если в эскуэл дэвэлопере 17. кликаем на "помощь". если бы у них были доки поновее, они бы и сцылочку подправить не забылы : )


в общем, я от этого баловства пока ухожу, попробую пару вечеров поконструировать нечто вокруг Sytem.Data.DataSet и иже с ним. собственно, этим классом ограничивается мой практический опыт работы с базами данных. не считая пару раз построение соединения и конструирование запроса по образу и подобию уже имеющихся в приложении (уже даже не помню что за проект был).

класс очень удобный, я пару лет назад на нем что-то построил, все чудесно-быстро работает, только нужно все ручками прописывать, попробую некую оболочку примитивную сделать.


#47 
AlexNek патриот19.11.17 20:25
AlexNek
NEW 19.11.17 20:25 
in Antwort moose 19.11.17 18:32

Хм, а у меня не получается туда попасть

Вначале сюда,

https://docs.oracle.com/database/sql-developer-17.3/

а после сюда

https://docs.oracle.com/database/sql-developer-17.3/RPTUG/...

ну да ладно.


Если кинешь структуру базы я тебе для Sqlite базу и приложение с Linq сделаю, только должно быть не более 10 таблиц, иначе бесплатная версия не потянет.

#48 
  moose свой человек19.11.17 21:20
NEW 19.11.17 21:20 
in Antwort AlexNek 19.11.17 20:25, Zuletzt geändert 19.11.17 21:23 (moose)

спасибо. приложение с линк - это то, что у меня уже есть.


по вашей ссылке:


After you have entered the last column (transaction_type), check Advanced (next to Schema). This displays a pane for selecting more table options. For this table, you will use the Column Sequences and Foreign Keys panes.

в моей версии (17) НЕТУТКИ никакого "Advanced (next to Schema)". это раверняка - артефакты из версии 2.


Если кинешь структуру базы я тебе для Sqlite базу и приложение с Linq сделаю,


а вам это нафига? время девать некуда? эх, молодость, молодость ... будь я молодым, уделял бы больше времени книгам и спорту. сегодня спорту - экстрем, но максимально сжато по времени, чтиво - 99% техническое : (


#49 
AlexNek патриот19.11.17 22:47
AlexNek
NEW 19.11.17 22:47 
in Antwort moose 19.11.17 21:20
а вам это нафига?

сложно сразу объяснить. Как минимум, если человек помог мне, то как бы грех не помочь и ему.

Тем более к базам я не равнодушен.

#50 
  moose старожил19.11.17 23:26
NEW 19.11.17 23:26 
in Antwort AlexNek 19.11.17 22:47

я вам пока ничем не помог. но спасибо в любом случае : )

#51 
AlexNek патриот19.11.17 23:44
AlexNek
NEW 19.11.17 23:44 
in Antwort moose 19.11.17 23:26

Вы видимо уже подзабыли ветку где у нас оказались различные взгляды на архитектуру приложения.

А ведь без вашего толчка я бы не стал возится с WPF и потратил бы еще фиг знает сколько времени на решение проблемы с кнопкой.

Так что помощь была, хотя в общем то явного запроса с моей стороны не было.

#52 
Murr патриот20.11.17 09:51
Murr
NEW 20.11.17 09:51 
in Antwort moose 19.11.17 23:26

я вам пока ничем не помог.

-----

Это кажется.

Участвуя в обсуждении, даже если высказываемое является полной глупостью,

ты, в любом случае, даешь возможность взглянуть на ситуацию с другой позиции.

Часто - именно этого бывает достаточно...

#53 
Simple Nothing is f*cked21.11.17 10:01
Simple
NEW 21.11.17 10:01 
in Antwort AlexNek 19.11.17 15:04

Я ваще уже давно пользуюсь встроенным в IntelliJ и забыл девелопера как страшный сон.

#54 
  moose старожил21.11.17 18:16
NEW 21.11.17 18:16 
in Antwort Simple 21.11.17 10:01

посмотрел. интересно: разработчики считают, что с/с++ пора списывать, или просто у них особая ориентация?

#55 
  moose старожил21.11.17 18:25
NEW 21.11.17 18:25 
in Antwort moose 19.11.17 23:26

заморочка возникла. что считается хорошим стилем: одна база со множеством таблиц, если "темы схожие", или все-таки как-то выделить направления и создать более структурированный "набор баз данных"? с одной стороны, субд следят за тем, чтобы база была consistent, я так понимаю, что каждая база будет "правильная" поотдельности, а за совокупной правильностью нужно следить "самостоятельно"?

можно ли создавать средствами субд реляции между отдальными базами данных? например, имеются разные, но сходные базы. например, в нашем "транспортном цехе" (может, выслушать его начальника? : ) имеется не только база с путевками, но и база, ориентированная на выплату зарплаты (больше ничего в голову не приходит). или это должна быть одна база, потому что логично иметь одну таблицу сотрудников, из них некоторые могут быть водителями?

полная каша в голове : (

#56 
Murr патриот21.11.17 18:37
Murr
NEW 21.11.17 18:37 
in Antwort moose 21.11.17 18:25

одна база со множеством таблиц, если "темы схожие", или все-таки как-то выделить направления и создать более структурированный "набор баз данных"?

-----

База - одна на одну задачу.

Если задачи связанные - то это одна задача.


Но обычно задают другой вопрос - если сущности похожи, но нужно ли заводить отдельную таблицу?

Ответ нас него прост - либо таблицу на каждую сущность, либо общий список сущностей и одна таблица с дополнительным ключем...

До 10-ка сущностей Я бы делал отдельные таблицы, больше - делал бы две таблицы.


можно ли создавать средствами субд реляции между отдальными базами данных?

-----

Давно хочу, но пока таких не видел.

Но не путай это с сегментацией файлов данных.



полная каша в голове : (

------

Это еще только начало... через годик - начнет побаливать...



По большому счету - пока тебе нужна нормальная интегрированность данных - у тебя одна база.

Ее разделение на части повлечет за собой ручное писательство проверок и поддержки интегрированности.

#57 
AlexNek патриот21.11.17 21:16
AlexNek
NEW 21.11.17 21:16 
in Antwort moose 21.11.17 18:25
полная каша в голове

не переживайте - это всегда так.

Процесс разработки структуры БД ничем не проще создания ПО.

Для начала можно использовать научный подход, а затем начинать оптимизировать под текущие нужды.

Сорри, если уже читали

https://habrahabr.ru/post/254773/

http://i-novice.net/6-normalnyx-form-bd/

https://support.microsoft.com/ru-ru/help/283878/descriptio...


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

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


можно ли создавать средствами субд реляции между отдальными базами данных?

видимо имелись в виду реляции между таблицами находящихся в разных базах данных. Может где то такая возможность и предусмотрена, мне пока не попадалось, слишком уж много заморочек получается.

#58 
  moose старожил22.11.17 00:00
NEW 22.11.17 00:00 
in Antwort AlexNek 21.11.17 21:16

спасибо, вы мне все очень помогли. утешили в любом случае : )


новая заморочка. допустим, мы проектируем нечто в каком-то домене from scratch, но пока не все знаем: опыт показет. мы хотим иметь базу данных (или нечто, на ее базе построенное), и не знаем пока, сколько и каких приложений. одни приложения будут заниматься поддержанием базы данных в актуальном состоянии, другие будут эти данные для чего-то использовать, третьи - делать и то, и другое.

понятно, нужно как-то продумать структуру базы, но как мы должны строить приложение? должно ли оно знать эту структуру? напрашивается некий адаптер, который знает структуру и имеет интерфейс, отвечающий запросам приложения. кто как делает? в приложениях вы пишете FROM ... SELECT ..., или create_new_lorry (...), get_driver_age (...) и т.д.?

#59 
Murr патриот22.11.17 00:10
Murr
NEW 22.11.17 00:10 
in Antwort moose 22.11.17 00:00

но как мы должны строить приложение? должно ли оно знать эту структуру?

-----

Многоуровнево. С базой будет работать DAL-уровень - он и будет "знать" структуру базы...


кто как делает?

-----

Поковыряй Entity Framework или другой ОРМ...

Хотя... при малом объеме - можно хоть а-ля-ВБ6 лепить - контролы с SQL в форме...

#60 
AlexNek патриот22.11.17 00:38
AlexNek
NEW 22.11.17 00:38 
in Antwort moose 22.11.17 00:00, Zuletzt geändert 22.11.17 00:41 (AlexNek)

Проще наверное сказать, как лучше НЕ делать - Не размазывать доступ к элементам базы по всему приложению.


А так, довольно удобно Linq2SQL и использование POCO объектов для таблиц.

            int countDevices = (from row in _db.DeviceSensors where row.Id == dataItem.DeviceId select row).Count();


        public IQueryable<DeviceSensor> GetDeviceSensors()
        {
            IQueryable<DeviceSensor> query = from row in _db.DeviceSensors select row;
            return query;
        }

Но это если экстрима нет.

А то вот была база с таблицами, где более миллиона записей, там пришлось все Linq запросы снести и делать "метровые" SQL (это если печатать)

#61 
Simple Nothing is f*cked22.11.17 09:21
Simple
NEW 22.11.17 09:21 
in Antwort moose 21.11.17 18:16

У них есть CLion.

Я имел в виду встроенный клиент баз данных, который позволяет делать практически все и при этом имеет некоторые фичи, без которых я уже не могу обойтись, типа перемещения по FK.

Вообще, после продуктов JetBrains все эти эклипсы и вижуалстудии хочется забыть как страшный сон.

#62 
  moose старожил22.11.17 15:07
NEW 22.11.17 15:07 
in Antwort Simple 22.11.17 09:21, Zuletzt geändert 22.11.17 15:09 (moose)

если вам дотнет приложение создать нужно (и наверное, любое под виндоуз), лучше визуал студии вам не найти.

#63 
Simple Nothing is f*cked22.11.17 15:32
Simple
NEW 22.11.17 15:32 
in Antwort moose 22.11.17 15:07

Я не работаю с дотнетом, но имею основания предполагать, что вот это будет получше: https://www.jetbrains.com/rider/

Попробуйте ради интереса, интересно ваше мнение.

#64 
  moose старожил26.11.17 21:46
NEW 26.11.17 21:46 
in Antwort Simple 22.11.17 15:32, Zuletzt geändert 26.11.17 21:48 (moose)

спасибо! попробую обязательно, как только разгребусь с "маленьким тулом вокруг System.Data.DataSet". он задал непростую загадку. тул работает уже довольно устрйчиво, баги 100% имеются, но уже с его помощью могу наваять схему базы данных. столкнулся с такой проблемой в этом классе. посоздавав бажу, таблицы, колонки, решил, что неплохо бы подобавлять рилэйшнз. допускаются множественные, но мне пока не надо, решил не усложнять, ограничиться только одинарными. но, как тулу положено, допускает ошибки и их исправления. по простоте душевной решил, что если добавил DataRelation, а потом удалил - проблема исчерпана. но не тут-то біло! когда создается рилэйшн, в участвующих таблицах, оказывается, сохраняются созданные при добавления ришэйшна Constraints! в общем, все работает красиво, но только пока мы заранее знаем, какие рилэйшнз нам нужны, и только их и создаем.

видимо, в дизайне ошибся, думал, буду крутиться вокруг реального объекта DataSet, и по ходу редактирования в гуи буду сразу отображать в нем изменения, и сохранять немедленно. оказывается, этот подход ввиду сложности объекта не годится: с базами, таблицами и колонками никаких проблем, пока не дошел до рилэйшнз, которые "чисто удалить" сам класс не позволяет. видимо, нужно какую-то теневую структуру создавать, редактировать и сохранять. и только когда она готова, нажатием на кнопочку можем создать (без ошибок и исправлений!) уже настоящий объект DataSet, и сохранить. только вот вопрос теперь: может оказаться так, что когда все это заработает, мне этот DataSet нафер не нужен будет, возможно, я лучше обойдусь моим созданным теневым объектом? : )

#65 
Murr патриот26.11.17 21:52
Murr
NEW 26.11.17 21:52 
in Antwort moose 26.11.17 21:46

оказывается, этот подход

-----

Тебе говорилось - это не база...

#66 
  moose старожил07.12.17 17:19
NEW 07.12.17 17:19 
in Antwort Simple 22.11.17 15:32

хотел попробовать, но у них нет кастрированного варианта (типа "экспресс"), а только на месяц, с регистрацией и прочими штучками. мне это для попробовать слишком umstaendig.

#67 
Murr патриот07.12.17 17:53
Murr
NEW 07.12.17 17:53 
in Antwort moose 07.12.17 17:19

Пыхх... Даешь левый мыл и ставишь на виртуалку...

#68 
  moose старожил07.12.17 21:10
NEW 07.12.17 21:10 
in Antwort Murr 07.12.17 17:53

...опробываешь по-быстрому, пишешь отчет, готово!...

человеку, думаю, интересно мнение, на чем-то основанное, а не лишь бы "а я и это знаю! а я и тут - экзперд!".

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

#69 
1 2 3 4 alle