Как вы создаёте базы данных?
От: Arsen.Shnurkov  
Дата: 27.07.20 05:44
Оценка:
Я думаю, что переносить в базы данных не надо.
Там специалисты по SQL (возможно даже с Java-ой), а мне нужны советы по .Net

Sinix пишет
Автор: Sinix
Дата: 27.04.10
:
.dbschema (XML-файл такой) -> VSDBCMD.EXE (утилита командной строки)
и вызывать это всё командой
MSBuild /t:Build;Deploy MyDatabaseProject.dbproj

А где исходники от VSDBCMD.EXE ? Как то же самое в опенсорсе проделать-то?

Did you get way into doing command line deployments of your databases using vsdbcmd.exe? Well, if you are one of those developers and you’ve upgraded to the latest version of the SQL Server Database Projects, then you might be wondering just where vsdbcmd.exe went.
Answer: vsdbcmd.exe has been replaced with SqlPackage.exe.


DACPAC это zip-файл.
И чё? А на github как его хранить — в бинарном виде?

А работать с ним как?
https://developercommunity.visualstudio.com/idea/920512/database-projectsdacpac-should-support-postgres.html

https://github.com/Microsoft/DACExtensions

DacFx is the core technology the SQL Server Data Tools leverages for incremental database deployments, modelling and validation of database schemas and other key functionality. DacFx provides a DacServices API that supports programmatic deployment of Dacpac files.

https://stackoverflow.com/questions/40747082/finding-data-type-information-for-certain-objects-in-dacfx-api
https://stackoverflow.com/questions/44058693/how-to-get-type-of-a-column-using-dacfx-api

Допустим есть некий файл "Microsoft.Data.Tools.Schema.SqlTasks.targets":
<Import Condition="'$(SQLDBExtensionsRefPath)' == ''" Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" />
Так-то я бы может быть с ним и собрал бы при помощи msbuild проект .sqlproj
но где мне его взять (под опенсорсной лицензией) ?

Рекомендуют
https://github.com/lecaillon/Evolve
но простые скрипты это уже поздно. Я-то хотел из XML...

Ещё говорят
dotnet ef migrations script --idempotent
https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/applying?tabs=dotnet-core-cli
Здесь мне непонятно, что общего у EF и у DacFx.

You can open an EDM designer in XML view where you can see all the three parts of the EDM: Conceptual schema (CSDL), Storage schema (SSDL) and mapping schema (MSL), together in XML view.


MS-SSDL:Store Schema Definition Language File Format
https://habr.com/ru/post/50626/
Отредактировано 04.08.2020 10:48 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 04.08.2020 10:41 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 04.08.2020 10:23 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 10:45 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 10:44 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 10:41 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 7:09 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 7:04 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 6:57 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 6:56 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 6:51 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 6:38 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 6:22 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 6:17 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 27.07.2020 5:44 Arsen.Shnurkov . Предыдущая версия .
Re: Как вы создаёте базы данных?
От: Danchik Украина  
Дата: 27.07.20 10:53
Оценка: +1
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Я думаю, что переносить в базы данных не надо.

AS>Там специалисты по SQL (возможно даже с Java-ой), а мне нужны советы по .Net

Может все-таки правильно вопрос задать?
Что надо то? Миграции или перенос данных?
Re[2]: Как вы создаёте базы данных?
От: Arsen.Shnurkov  
Дата: 27.07.20 11:43
Оценка:
D> Может все-таки правильно вопрос задать?
D> Что надо то? Миграции или перенос данных?

Мне надо описание процесса разработки со следующими требованиями:
1) используются только опенсорсные утилиты
2) желательно, чтобы была возможность собирать стандартные "студи́йные" sqlproj-проекты
3) желательно иметь возможность сначала создать XML-файл с описанием, а потом из него SQL-скрипты,
потому что парсить SQL сложнее чем работать с Xml

И ещё нужно описание того, как все то что выше относится к Entity Framework
и всяким командам dotnet ef ...
Отредактировано 27.07.2020 11:48 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 27.07.2020 11:47 Arsen.Shnurkov . Предыдущая версия .
Re: Как вы создаёте базы данных?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.07.20 14:24
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:
Может Database First
и солнце б утром не вставало, когда бы не было меня
Re[2]: Как вы создаёте базы данных?
От: Arsen.Shnurkov  
Дата: 27.07.20 14:28
Оценка:
Здравствуйте, Serginio1.

Чорд, я разочарован. Это Visual Studio-то по вашему опенсорсная программа?
Re[3]: Как вы создаёте базы данных?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.07.20 14:39
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Здравствуйте, Serginio1.


AS>Чорд, я разочарован. Это Visual Studio-то по вашему опенсорсная программа?


А при чем тут Visual Studio-то? В студии используются плагины. Плагин может быть и опенсорсный.
.Net Core вполне себе опенсорсный https://www.entityframeworktutorial.net/efcore/create-model-for-existing-database-in-ef-core.aspx
https://docs.microsoft.com/ru-ru/ef/core/miscellaneous/cli/powershell

Вот исходники
https://github.com/dotnet/Scaffolding
и солнце б утром не вставало, когда бы не было меня
Отредактировано 27.07.2020 14:46 Serginio1 . Предыдущая версия . Еще …
Отредактировано 27.07.2020 14:44 Serginio1 . Предыдущая версия .
Re[3]: Как вы создаёте базы данных?
От: Danchik Украина  
Дата: 28.07.20 10:58
Оценка: +1
Здравствуйте, Arsen.Shnurkov, Вы писали:

D>> Может все-таки правильно вопрос задать?

D>> Что надо то? Миграции или перенос данных?

AS>Мне надо описание процесса разработки со следующими требованиями:

AS>1) используются только опенсорсные утилиты
AS>2) желательно, чтобы была возможность собирать стандартные "студи́йные" sqlproj-проекты
AS>3) желательно иметь возможность сначала создать XML-файл с описанием, а потом из него SQL-скрипты,
AS>потому что парсить SQL сложнее чем работать с Xml

AS>И ещё нужно описание того, как все то что выше относится к Entity Framework

AS>и всяким командам dotnet ef ...

Значит так, если вы идете в бой с EF, то можно поиграть в рулетку с его CodeFirst. Тогда база создается из модели и скрипты миграций она также генерит.

Другой вариант у вас есть база и надо работать с ней, тогда миграции делаете чем хотите, я предпочитаю FluentMigrator, зачем тут xml не понимаю.
Потом с нее делаете слепок. Как работает, черт его знает, но вроде уже торт.
https://docs.microsoft.com/en-us/ef/core/managing-schemas/scaffolding?tabs=dotnet-core-cli
Re[3]: Как вы создаёте базы данных?
От: Mystic Artifact  
Дата: 29.07.20 14:35
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Мне надо описание процесса разработки со следующими требованиями:

AS>1) используются только опенсорсные утилиты
Тут SSDT наверное вообще мимо. Но тогда уж что б быть честным, то надо и sql server использовать опенсорсный. А еще лучше в что б он хранил всё в xml, так проще парсить и никаких проприетарных структур данных.

AS>2) желательно, чтобы была возможность собирать стандартные "студи́йные" sqlproj-проекты

А гуглом там вам не запрещают пользоваться? Можно хотя бы попробовать разобраться: https://erikej.github.io/efcore/2020/05/11/ssdt-dacpac-netcore.html

AS>3) желательно иметь возможность сначала создать XML-файл с описанием, а потом из него SQL-скрипты,

AS>потому что парсить SQL сложнее чем работать с Xml
Зачем? Даже если писать свою утилиту мигратор то большинство потребностей покрывается примитивнейшым парсером.

AS>И ещё нужно описание того, как все то что выше относится к Entity Framework

AS>и всяким командам dotnet ef ...

SSDT никак не соотносится с EF. В EF можно генерировать модельки по БД (database first). Либо code-first, но тогда SSDT тут пятое колено. Либо как сказал Danchik вообще использовать нечто иное.

То, что вы озвучили, что вам надо сочинить описание процесса разработки это хорошо. Только ни цели, ни доступных инструментов, ни хоть какого-то намека нет. Кроме того поставленные вопросы — не относятся к процессу разработки, скорее тех записки как это может работать. Ответ тут может быть один — это должно быть удобно с т.з. разработки. Остальное вообще почти без разницы. Ну разумеется процесс деплоя тоже должен быть ясным.
Re[4]: Как вы создаёте базы данных?
От: Arsen.Shnurkov  
Дата: 30.07.20 00:06
Оценка:
MA> Но тогда уж что б быть честным, то надо и sql server использовать опенсорсный.

Я-то как раз postgresql планирую. Но вы себе даже такое помыслить не можете, говорите об этом как о чем-то для вас запредельном.
Откуда столько гонора в вас?

MA> А еще лучше в что б он хранил всё в xml, так проще парсить


Зачем мне XML ? Я хочу что-то вроде "Model Driven Architecture", только модель описывать в виде XML,
потому что у меня нет графического редактора.
Дальше я собираюсь из этого XML наплодить кучу .sql-файлов при помощи T4 Template Engine
и скормить это всё в https://github.com/lecaillon/Evolve

Печалит меня то, что вышеописанный процесс не такой как "стандартный".
Если я правильно понял, стандартный основан на использовании sqlpackage.exe

MA> А гуглом там вам не запрещают пользоваться?


Я как раз нагуглил оба этих репозитория:
https://github.com/Microsoft/DACExtensions
https://github.com/jmezach/MSBuild.Sdk.SqlProj
(причём в первом сообщении, которое вы не читали, есть первая из этих ссылок).

Но первым неясно как пользоваться (исходников утилиты sqlpackage.exe я так и не нашел
(и судя по этому проекту — https://github.com/imgen/DacpacDeployUtility не я один)
а второй не выглядел "официальным" и всё равно непонятно как он работает (может через тот же sqlpackage)

MA> большинство потребностей покрывается примитивнейшым парсером


Смотрите:
— парсеры были в 2004-м 2005-м годах. Потом в 2008 в MS зарелизили vsdbcmd.exe и .dbschema-файлы. Все кто на них не перешел — отстали от прогресса.
— дальше в 2012 от vsdbcmd.exe и .dbschema отказалиcь в пользу sqlpackage.exe и .dacpac
в 2013-2014 на собеседованиях спрашивали: а что вы знаете о юнит-тестах для SQL ?

MA> хотя бы попробовать разобраться


И теперь в 2020-м вы мне предлагаете фактически руками скрипты заливать (да там всё просто, говорите вы мне).
Это говорит только о том, что современными технологиями вы пользоваться не умеете "но там разобраться просто".

Ничего не знать и при этом пытаться глумиться, это ж надо таким быть!?!?
Отредактировано 30.07.2020 1:37 Arsen.Shnurkov . Предыдущая версия . Еще …
Отредактировано 30.07.2020 1:27 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 1:26 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 1:26 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 1:23 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 1:19 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 1:18 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 1:16 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 0:20 Arsen.Shnurkov . Предыдущая версия .
Отредактировано 30.07.2020 0:09 Arsen.Shnurkov . Предыдущая версия .
Re[5]: Как вы создаёте базы данных?
От: Mystic Artifact  
Дата: 01.08.20 13:12
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

MA>> Но тогда уж что б быть честным, то надо и sql server использовать опенсорсный.

AS>Я-то как раз postgresql планирую. Но вы себе даже такое помыслить не можете, говорите об этом как о чем-то для вас запредельном.
AS>Откуда столько гонора в вас?
Обидеть не хотел, извиняюсь.
Если сервер не MSSQL — то и SSDT и все связанные с ним тулзы не имеют никакого смысла / не релевантны.

AS>Зачем мне XML ? Я хочу что-то вроде "Model Driven Architecture", только модель описывать в виде XML,

AS>потому что у меня нет графического редактора.
AS>Дальше я собираюсь из этого XML наплодить кучу .sql-файлов при помощи T4 Template Engine
Традиционная болезнь таких подходов, в том, что они красивы на бумаге, но детали реализации БД будут и должны быть прозрачными — т.е. просвечиваться. Насколько я помню в pgsql используются генераторы, а не автогенерируемые (identity) колонки (хотя могу путать, pgsql я давно в руках не держал) как в мсскл, и это надо учитывать. Т.е. для того что бы модель было возможно использовать — нужно что бы она отражала эти детали сервера бд (ну и любые другие детали). В целом, это не проблема, если не заморачиваться универсальностью. Второй вопрос который нужно решить для себя — есть ли и понадобятся ли специальные возможности БД, которые могут не отражаться в модели. Это и вовсе не проблема для своих нужд, но может быть проблемой при использовании сторонних инструментов.

AS>Печалит меня то, что вышеописанный процесс не такой как "стандартный".

AS>Если я правильно понял, стандартный основан на использовании sqlpackage.exe
Нет стандартного. В вашем контексте существование sqlpackage.exe — проще игнорировать вообще. У вас своя схема и свои утилиты.

MA>> большинство потребностей покрывается примитивнейшым парсером

AS>Смотрите:
Для того что бы сделать мигратор/подыматор БД — нужны SQL скрипты, которые может потребить утилита. Единственная ее задача — поднять их в правильном порядке. Для того что бы грубо выяснить зависимости — полноценный парсинг не нужен. Проще всего выполнять эти скрипты на локальной БД — после получать схему или объекты уже из БД и уже следующим шагом — сравнение с существующей => генерация изменяющих скриптов. Как видите парсер тут не нужен. Это один из возможных наколеночных вариантов.
Очевидно, что если вы изначально имеете модель — то это и вовсе не нужно.

AS>И теперь в 2020-м вы мне предлагаете фактически руками скрипты заливать (да там всё просто, говорите вы мне).

AS>Это говорит только о том, что современными технологиями вы пользоваться не умеете "но там разобраться просто".
Некоторые способы не устаревают и они просто работают, с минимальной автоматизацией. Все остальные продвинутые решения — требуют или собственных инструментов, которые известно как работают, или если берется сторонний компонент — нужно иметь на готове большой напильник для преодоления проблем (или иметь опыт с ним и таким образом известно как они работают). Брать же в слепую любой левый мигратор и вместо того что бы писать код на SQL — писать его на мета-языке или DSL, — решение совсем не без недостатков, и покрываются ли они своими достоинствами для вас лично — я не знаю.

Еще раз: SSDT силен интеграцией в студии и производимым семантическим анализом. А так же очень приличными средствами для деплоя. Если бы БД была MSSQL — выбор бы был очевиден.

Но задача: нужно вести разработку с тем что есть и задача нужно сделать средства для разработки — совершенно разного рода задачи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.