我想在varchar列中实现不区分大小写的唯一性.但是,Postgres中没有不区分大小写的文本数据类型.由于原始文本大小并不重要,因此在插入具有UNIQUE约束的列之前将全部转换为小写/大写是一个好主意.此外,它将需要一个INDEX快速搜索.
Postgres有没有办法在插入之前操作数据?
我看了另外一个问题:如何自动将MySQL列转换为小写.它建议在插入/更新时使用触发器来使用小写文本或使用带有小写文本的视图.但是,所提出的方法都没有确保唯一性.
此外,由于这些数据将由各种应用程序读取/写入,因此在每个单独的应用程序中降低数据并不是一个好主意.
在Python中,counter在列表理解期间是否存在任何可用的for循环?
为什么我需要一个计数器,这个例子更清楚:
我希望实现以下目标:
初步清单: ['p', 'q', 'r', 's']
期望清单: [(1, 'P'), (2, 'Q'), (3, 'R'), (4, 'S')]
在所需的列表中,每个元组的第一个元素是序数.如果它只是平面列表,我可能已经习惯zip了这一点.但是,我正在处理的列表是嵌套的,三层深度(考虑分层数据),它是通过列表理解生成的.
所以,我想知道是否有任何方法可以在列表理解期间引入这些序数.如果没有,那么什么是最好的解决方案.
PS:这里小写字母转换为大写字母,但这不是问题的一部分,将其视为数据转换.
码:
allObj = Category.objects.all()
tree =[(_, l1.name, [(__, l2.name, [(___, l3.name) for l3 in allObj if l3.parentid == l2.categoryid]) for l2 in allObj if l2.parentid == l1.categoryid]) for l1 in allObj if l1.parentid == None]
Run Code Online (Sandbox Code Playgroud)
allObj 包含来自表类别的数据,该类别又包含以邻接列表形式表示的分层数据.
我已经放置_了我需要序数的地方.请注意,列表是嵌套的,因此每个级别将有一个单独的计数器,由1,2和3表示_.
正如在这个问题中所回答的:PostgreSQL中的基数,基数是使用约束来实现的.
基数规则定义了允许的关系计数 - 一对多,多对多等.使用连接表实现多对多,使用FOREIGN KEY实现一对多.
但是如何实现一对一_或多(一对一+)关系.哪个是相同的问题:如何在PostgreSQL中强制执行最小基数?
实际情况是需要存储说明地址(或电话号码)的地址(或电话号码)必须由人(例如用户或客户)提供(但可以更多).
编辑:
上述情况是一个普遍问题的特殊情况(基数为1).一般问题是:如何强制执行任意数字的基数?
作为回答壶一个非空外键引用可以被用作一个替代解决方法,如果最小基数是一个.它还将提供一个额外的功能来选择许多默认值.
但考虑一下板球队与其球员之间关系的另一种情况.每支球队必须拥有最少11名球员,才有资格成为一支球队.这里最小基数是十一(11).
类似的,学校的课程和学生之间的关系,每个学生必须参加至少5门课程,每门课程必须有10名学生最少.