如何根据请求初始化Apartment时,如何找出当前的租户(架构)
如果我在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(其中一个必须包含信息).
我该怎么做呢?
最近我们在数据库服务器上遇到了问题,经过长时间的努力,决定更改数据库服务器.因此,我们设法在另一台服务器上恢复数据库,更改连接字符串等.在我们尝试从Web浏览器访问网站之前,一切都按计划进行.
我们开始收到有关未找到数据库对象的错误.后来我们发现它是由于修改后的模式名称而发生的.由于Kentico数据库中有数百个数据库对象(表,视图和存储过程),因此无法一个接一个地手动更改所有这些对象.有这样做的实用方法吗?
sql database-migration kentico sql-server-2008 database-schema
民意调查的最佳数据库架构是什么?一对多的关系对此有利吗?我正在考虑有两张桌子:
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)
你的想法是什么?我在想它吗?
我试图找到一种方法来查找数据库中的表名称(如果存在).我发现从sqlite cli我可以使用:
>.tables
Run Code Online (Sandbox Code Playgroud)
那么对于字段:
>PRAGMA TABLE_INFO(table_name)
Run Code Online (Sandbox Code Playgroud)
这显然在python中不起作用.有没有办法用python做这个或者我应该只使用sqlite命令行?
我有一个非常大的Oracle数据库,有许多表和数百万行.我需要删除其中一个,但是要确保删除它不会破坏任何指向它作为外键记录的其他依赖行.有没有办法获得指向此行的所有其他记录或至少表格模式的列表?我知道我可以尝试自己删除它,并捕获异常,但我不会自己运行脚本,需要它第一次运行清理.
我有来自Oracle的SQL Developer工具和来自AllRoundAutomations的PL/SQL Developer.
提前致谢!
我很难弄清楚何时在数据库设计中使用1对1的关系,或者是否有必要.
如果您只能在查询中选择所需的列,则有必要将表拆分为1对1关系.我想更新一个大表对性能的影响比一个较小的表更多,我确信它取决于表用于某些操作的重量(读/写)
因此,在设计数据库模式时,如何将一对一关系考虑在内?您使用什么标准来确定是否需要一个标准,而不使用标准有什么好处?
谢谢!
我有一个应用程序将部署在带有SQL Server的生产PC上.我希望能够在我的数据库中存储和检索模式的版本.我对能够实现这一目标的最佳实践感兴趣,主要目标如下:
我希望有一种方法可以在元数据中存储"版本",而不是普通表,可以通过系统存储过程访问/设置.
任何想法或最佳做法?
编辑:我发现可能有希望的一个选项是使用SQL Server扩展属性,使用"Schema_Version"和版本号将分配给DB的键值.它没有加密(但值可能是),并且没有隐藏,但至少从我们的一些用户和现场人员浏览的实际数据库结构中删除(令我沮丧!:))
我将开发服务器上的数据库表与实时服务器进行比较,查找列名称更改,新列和已删除的列.我想做这样的事情:
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) 我们正在使用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
如果表存在,实际上并不会更新架构.这在他们的文档中有说明.
唯一的选择似乎是{ …
database-schema ×10
database ×2
mysql ×2
postgresql ×2
sql ×2
constraints ×1
javascript ×1
kentico ×1
multi-tenant ×1
one-to-one ×1
oracle ×1
orm ×1
python ×1
sequelize.js ×1
sql-server ×1
sqlite ×1