 	/// - returns: The column's value
 	///
 	/// - throws: An error if the column wasn't found or contains an illegal value
-	public func column<T: DatabaseSerializable>(_ name: String) throws -> T {
-		return try T.deserialize(from: column(name))
-	}
-}
-
-extension Column {
-	/// Returns the value of the column.
-	///
-	/// - returns: The column's value
-	///
-	/// - throws: An error if the column contains an illegal value
-	public func value<T: DatabaseSerializable>() throws -> T {
-		return try row.column(index)
+	public func value<T: DatabaseSerializable>(named name: String) throws -> T {
+		return try T.deserialize(from: value(named: name))
 	}
 }
 


/// A type that may be serialized to and deserialized from a database.
///
/// This is a more generic method for database storage than `ParameterBindable` and `ColumnConvertible`
/// because it allows types to customize behavior based on the database data type.
///
/// For example, the implementation for `NSNull` is:
///
/// ```swift
/// extension NSNull: DatabaseSerializable {
///     public func serialized() -> DatabaseValue {
///         return .null
///     }
///
///     public static func deserialize(from value: DatabaseValue) throws -> Self {
///         switch value {
///         case .null:
///             return self.init()
///         default:
///             throw DatabaseError.dataFormatError("\(value) is not null")
///         }
///     }
/// }

		switch value {
		case .blob(let b):
			guard let result = NSKeyedUnarchiver.unarchiveObject(with: b) as? Self else {
				throw DatabaseError.dataFormatError("\(value) is not a valid instance of \(Self.self)")
			}
			return result
		default:
