标签: database-schema

25
推荐指数
1
解决办法
5638
查看次数

在postgresql中添加一个二分之一的非空约束

如果我在Postgresql中有一个表:

create table Education ( 
    id                  integer references Profiles(id),
    finished            YearValue not null,
    started             YearValue,
    qualification       text,
    schoolName          text,
    studiedAt           integer references Organizations(id),
    primary key (id)
);
Run Code Online (Sandbox Code Playgroud)

我需要创建一个约束,以便schoolName或者studiedAt不需要为null(其中一个必须包含信息).

我该怎么做呢?

sql postgresql constraints database-schema

24
推荐指数
1
解决办法
1万
查看次数

如何在MSSQL中更改所有表,视图和存储过程的模式

最近我们在数据库服务器上遇到了问题,经过长时间的努力,决定更改数据库服务器.因此,我们设法在另一台服务器上恢复数据库,更改连接字符串等.在我们尝试从Web浏览器访问网站之前,一切都按计划进行.

我们开始收到有关未找到数据库对象的错误.后来我们发现它是由于修改后的模式名称而发生的.由于Kentico数据库中有数百个数据库对象(表,视图和存储过程),因此无法一个接一个地手动更改所有这些对象.有这样做的实用方法吗?

sql database-migration kentico sql-server-2008 database-schema

24
推荐指数
4
解决办法
7万
查看次数

轮询数据库架构

民意调查的最佳数据库架构是什么?一对多的关系对此有利吗?我正在考虑有两张桌子:

poll_questions
    int id
    varchar body
    datetime created_at
    datetime updated_at

poll_answers
    int id
    varchar body
    int votes default 0
    int question_id (foreign key to poll_questions.id)
    datetime created_at
    datetime updated_at
Run Code Online (Sandbox Code Playgroud)

然后还会有第三个表来跟踪谁投票给答案,这样用户只能投票一次:

poll_voting_history
    int id
    int question_id (foreign key to poll_questions.id)
    int answer_id (foreign key to poll_answers.id)
    int user_id (foreign key to the id in the users table)
    datetime created_at
    datetime updated_at
Run Code Online (Sandbox Code Playgroud)

你的想法是什么?我在想它吗?

mysql database-schema

23
推荐指数
2
解决办法
7937
查看次数

有没有办法从python中获取数据库的模式?

我试图找到一种方法来查找数据库中的表名称(如果存在).我发现从sqlite cli我可以使用:

>.tables
Run Code Online (Sandbox Code Playgroud)

那么对于字段:

>PRAGMA TABLE_INFO(table_name)
Run Code Online (Sandbox Code Playgroud)

这显然在python中不起作用.有没有办法用python做这个或者我应该只使用sqlite命令行?

python sqlite database-schema

22
推荐指数
3
解决办法
4万
查看次数

如何查找指向Oracle中一条记录的外键依赖项?

我有一个非常大的Oracle数据库,有许多表和数百万行.我需要删除其中一个,但是要确保删除它不会破坏任何指向它作为外键记录的其他依赖行.有没有办法获得指向此行的所有其他记录或至少表格模式的列表?我知道我可以尝试自己删除它,并捕获异常,但我不会自己运行脚本,需要它第一次运行清理.

我有来自Oracle的SQL Developer工具和来自AllRoundAutomations的PL/SQL Developer.

提前致谢!

database oracle database-schema

21
推荐指数
3
解决办法
6万
查看次数

为什么在数据库设计中使用一对一的关系?

我很难弄清楚何时在数据库设计中使用1对1的关系,或者是否有必要.

如果您只能在查询中选择所需的列,则有必要将表拆分为1对1关系.我想更新一个大表对性能的影响比一个较小的表更多,我确信它取决于表用于某些操作的重量(读/写)

因此,在设计数据库模式时,如何将一对一关系考虑在内?您使用什么标准来确定是否需要一个标准,而不使用标准有什么好处?

谢谢!

database database-design one-to-one database-schema

21
推荐指数
3
解决办法
2万
查看次数

在SQL Server中存储数据库架构版本的最佳实践?

我有一个应用程序将部署在带有SQL Server的生产PC上.我希望能够在我的数据库中存储和检索模式的版本.我对能够实现这一目标的最佳实践感兴趣,主要目标如下:

  1. 能够存储并轻松检索数据库的版本号.
  2. 隐藏或更难以被客户找到和操纵.
  3. 我们在创建新版本时可以进行编辑/更改.
  4. 备份数据库或删除数据库会保留版本#以进行取证.

我希望有一种方法可以在元数据中存储"版本",而不是普通表,可以通过系统存储过程访问/设置.

任何想法或最佳做法?

编辑:我发现可能有希望的一个选项是使用SQL Server扩展属性,使用"Schema_Version"和版本号将分配给DB的键值.它没有加密(但值可能是),并且没有隐藏,但至少从我们的一些用户和现场人员浏览的实际数据库结构中删除(令我沮丧!:))

sql-server database-schema

21
推荐指数
3
解决办法
8666
查看次数

将SHOW COLUMNS的组输出分组为逗号分隔列表

我将开发服务器上的数据库表与实时服务器进行比较,查找列名称更改,新列和已删除的列.我想做这样的事情:

SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
Run Code Online (Sandbox Code Playgroud)

我所追求的是一个以逗号分隔的列表,然后我可以将其带到实时服务器并执行:

SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
Run Code Online (Sandbox Code Playgroud)

关于如何最好地做到这一点的任何想法 - 通过我自己的方法纠正我,或通过另一种方式一起完成?显然,上面的SQL不起作用.

注意:服务器是完全独立的,可能无法相互通信,因此无法直接比较.


编辑

谢谢你的回答,伙计们!应用您对问题的答案,这是我获取列名的最终SQL:

SELECT CONCAT("'", GROUP_CONCAT(column_name ORDER BY ordinal_position SEPARATOR "', '"), "'") AS columns
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name'
Run Code Online (Sandbox Code Playgroud)

这给了我一个如下所示的列表:

'id', 'name', 'field1', 'field2'
Run Code Online (Sandbox Code Playgroud)

然后我可以使用此查询进行比较:

SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name' AND column_name NOT IN ('id', 'name', 'field1', …
Run Code Online (Sandbox Code Playgroud)

mysql database-schema

20
推荐指数
1
解决办法
2万
查看次数

Sequelize:改变生产模型架构

我们正在使用orm sequelize.js并定义了一个模型:

module.exports = function(sequelize, DataTypes) {
    var Source = sequelize.define('Source', {
        name: {
            type: DataTypes.STRING, 
            allowNull: false, 
            unique: true
        }
    }, {
        paranoid: true
    });

    return Source;
};
Run Code Online (Sandbox Code Playgroud)

这将部署到生产环境并使用同步到数据库sequelize.sync.下一步,我们添加一个参数:

module.exports = function(sequelize, DataTypes) {
    var Source = sequelize.define('Source', {
        name: {
            type: DataTypes.STRING, 
            allowNull: false, 
            unique: true
        }, 
            location: {
                    type: DataTypes.STRING
            }
    }, {
        paranoid: true
    });

    return Source;
};
Run Code Online (Sandbox Code Playgroud)

但是,部署到生产时sequelize.sync不会添加此新参数.这是因为sync:

CREATE TABLE IF NOT EXISTS

如果表存在,实际上并不会更新架构.这在他们的文档中有说明.

唯一的选择似乎是{ …

javascript postgresql orm database-schema sequelize.js

20
推荐指数
2
解决办法
2万
查看次数